AMIGA BASIC 3
Retro bilgisayar
Merhaba... Amiga Basic yazımıza başlarken genel özelliklerinden bahsetmiş ve Amiga Basic'in gelişmiş programlama özelliklerini, alt programları, bellek yönetimini desteklemekte olduğunu anlatmıştık. Bütün bunların dışında bir de Amiga'nın mükemmel fonksiyon kütüphanelerine erişebilmesi, çok güçlü ve esnek özellikler kazandırmaktadır. Bu sayıda Amiga Basic'in bu tür yapısal özelliklerine biraz daha yakından bakalım isterseniz.
SUBPROGRAM (ALT PROGRAMLAR)
Alt programlar, alt rutinlere benzemekle beraber çok daha gelişmiş modüllerdir. Genellikle birçok program tarafından birlikte kullanılmak üzere yardımcı rutinler olarak hazırlanırlar.
Alt programlar da program yönergelerinden oluşurlar. Alt program kullanımının üç kayda değer avantajı vardır. Birincisi, alt programların değişkenleri ana programdan bağımsız kullanmalarıdır, öyle ki alt program ile ana programda aynı değişken isimlerini kullanmış bile olsanız, iki değişken ayrı kabul edilir ve ayrı değerleri ile korunurlar. Alt programdaki değişkenler BÖLGESEL DEĞİŞKENLER olarak adlandırılır, çünkü değerleri ancak alt programın kendi işlevi ile değişebilir. İkinci avantaj, yine birinci avantaja bağlı olarak ortaya çıkar. Bir alt program, yeniden yazılmaksızın kullanılabilir. Çünkü alt program çok az değişikliklerle yeni programlar içine yerleştirilebilirler. Üçüncü avantaj ise alt programların yanlışlıkla çalıştırılma imkânlarının olmamasıdır. Program çalışma akışı esnasında sadece CALL yönergesi ile alt programı çalıştırır, kendiliğinden
END yönergesi görene kadar bir alt rutin gibi işlem yapmaz.
Bir alt program SUB ve END SUB yönergeleri arasında oluşturulur. END SUB yönergesinden önce EXIT SUB yönergesi ile alt programdan çıkılabilir. Yönerge formatı aşağıda verilmiştir:
SUB alt program adı [(parametreler)] STATIC
[SHARED değişken-listesi]
*
*
*
END SUB
Alt program adı, en fazla 30 karakter uzunluğunda ve diğer SUB yönergesinde kullanılmayan herhangi bir geçerli belirteçtir.
Parametreler, basit ve dizi değişken olarak iki değişik giriş içerebilir. Girişler virgül ile ayrılır. Parametre sayısı sadece Amiga Basic satırı uzunluğu ile sınırlıdır.
STATIC: Mutlaka kullanılması gereken kelimedir. Alt program içindeki tüm değişkenlerin değerlerini yine alt program içindeki değerler olarak kalacağını ifade eder. Static değişken değerleri alt program dışındaki hiçbir işlemle değişmez.
SHARED değişkenler Alt program dışında ana program bölümleri tarafından değiştirilebilir. Paylaşılması istenen bu değişkenler, SHARED yönergesinden sonraki değişken listesi bölümünde açıkça belirtilmelidir. Alt program içindeki tüm basit ve dizi değişkenleri SHARED yönergesinde belirtilmedikçe bölgesel olarak düşünülürler. SHARED yönergesi, ana programdaki değişkenleri alt program içinde kullanmaya izin verir.
A=l: B = 5: C=10
DIM P (100), Q (100)
*
*
*
SUB AMIGA STATIC
SHARED A,B,P (), Q ()
*
*
*
END SUB
Örneğinde ana programda tanımlanan C dışındaki tüm değişkenler AMIGA alt programı tarafından kullanılır. 3
Alt programlar içinde kullanıcı tanımlı fonksiyonlar, yeni bir SUB/END SUB bloğu, COMMON ve CLEAR yönergesi dışında tüm Amiga Basic yönergeleri kullanılabilir.
Ana program alt programı CALL yönergesi ve argüman listesi ile çağırır:
CALL alt program adı (argüman listesi) argüman listesi, ana programdan alt programa geçecek değişkenlerin listesini içerir. Bu komutla çağrılan alt programın ilk satırında CALL yönergesinde belirtilen argümanlara karşılık gelecek değişken isimleri belirtilmelidir. Değişken isimleri ile argüman isimlerinin aynı olması gerekmez. Sadece uygun sayı ve tipte olması yeterlidir.
CALL Ekle (A,B,C)
*
*
*
SUB Ekle (A,B,Z) STATIC
Z=X+Y
X=X+12
Y=Y+94
END SUB
örneğinde A, B ve C argümanlarının alt programdaki karşılıkları sırasıyla X, Y ve Z basit değişkenleridir. Program çalıştığında alt programdaki X, Y ve Z değişkenlerinin yeni değerleri ana programdaki A, B ve C değişkenlerinin yeni değeri olarak atanacaktır.
Ana program değişkenleri değerlerinin alt programda değişmesi istenmiyorsa, değişken isimleri parantez içine alınmalıdır:
CALL Ekle ((A), (B), sonuç) Parantez içindeki bu iki değişken Amiga Basic tarafından ifade olarak kabul edilir ve değerleri alt program tarafından değiştirilemez.
Basit değişkenleri ya da dizi elemanlarını bir Amiga Basic alt programına geçirmek için, değişken bildirimleri aynı şekilde yapılır. Aşağıdaki örnek programda bu tür bir bildirim örneği verilmiştir:

DIM B (15)
A = 4
CALL KARE (A,B (3))
PRINT A,B (3)
END
SUB KARE (X,Y) STATIC
X = X+l
Y = X*X
END SUB
Bu programda her Y değeri B dizisinin üçüncü elemanı, her X değeri de A değişkeni olarak kabul edilir. Alt program çalıştığında sonuçlar 5 ve 25 olarak ekrana basılır.
Aşağıdaki örnek tüm bir diziyi alt programa geçirmek için kullanılır:
CALL ÖRNEK (X%, Y%„ P 0, R 0)
END
SUB ÖRNEK (N %, M %, A(2), B(2),
C(3)) STATIC
END SUB
Bu örnekte alt programın parametre listesindeki N% ve M% tamsayı değişkenler, A ve B iki elemanlı ve C ise üç elemanlı dizi tanımlaması yapılmıştır. Bu liste, argüman listesi ile karşılıklı olarak uyumludur.
Assembly dili ile yazılmış alt programlar da Amiga Basic programlar içinden çağrılabilir. Bu konuyu ilerde örnekleri ile açıklayacağız. EVENT TRAPPING (KOŞUL YAKALAMA):
Event Trapping, programınızdaki mevcut koşulları (event) kontrol ederek, programı uygun rutinlere dallandırır. Mevcut olabilecek koşullar; zaman (ON TIMER), mouse işlevleri (ON MOUSE), kullanıcı tarafından tanımlanan menünün seçimleri (ON MENU), kullanıcının programı durdurmaya çalışması (ON BREAK) ve bir animasyon objesini diğer bir obje ya da pencere ile birleştirmek (ON COLLISION) olabilir. Event Trapping aktif olduğunda, Amiga Basic her yönergeyi çalıştırmadan mevcut koşulların var olup olmadığını kontrol eder. Koşul mevcutsa, kontrol otomatik olarak etiketi (label) belirtilen rutinin başlangıcına transfer edilir.
Event Trapping ana formatı: ON (koşul belirteci) GOSUB (etiket) şeklindedir. Koşul belirteci, yukarıda sıraladığımız koşullardan biridir.
Event Trapping'i aktif hale getirmek için:
(koşul belirteci) ON komutu verilir. Durdurmak ya da sona erdirmek için ise sırayla:
(koşul belirteci) OFF (koşul belirteci) STOP komutları kullanılır. BELLEK YÖNETİMİ:
Amiga Basic, içerdiği CLEAR yönergesi ile fazla bellek isteyen programlar gibi farklı amaçlar için bellek tahsisine yardımcı olur. CLEAR yönergesini kullanarak stack, data dilimleri (data segment) ve System heap'i (yığın) olmak üzere belleğin üç farklı bölümünün genişliğini kontrol edebilirsiniz. Komutun formatı:
CLEAR [, [data-segment-genişliği] [, stack-genişliği] data-segment-genişliği, Amiga Basic'in data dilimleri için kaç byte ayrılacağını belirtir. Bu bölüm programın tamamını, sayısal değişken ve dizileri, açık dosyalar için file buffer'larını bellekte tutabilmek için kullanılır. Amiga Basic bu işlem için otomatik olarak 25000 byte ayırır. Bu miktarı artırabilir ve azaltabilirsiniz. Uzun bir program yazıyorsanız ve bu bölümün genişliğini artırmak isterseniz sadece bellekle sınırlı olduğunuzu unutmayın. stack-genişliği ise, stack için ne kadar byte'lık yer ayrılacağını belirtir. Stack, iç içe geçmiş GOSUB'lar, FOR ... NEXT, WHILE/WEND ve kullanıcı tanımlı fonksiyonların muhafaza edildiği yerdir.
Data dilimleri ve stack için ayrılan RAM miktarından sonra da kalan RAM, System Heap için ayrılır. Bu bölüm Amiga'nın LIBRARY, WINDOW ve SCREEN gibi diğer işlevleri tarafından paylaşılır. SOUND ve WAVE bilgilerinin buffer'larını da bu bölüm içerir.
Bellek yönetiminde kullanılan diğer bir fonksiyon da FRE'dir. Bu fonksiyonla kalan serbest RAM miktarı öğrenilebilir. Fonksiyonun kullanımı iki türlü olabilir:
FRE (n) FRE (" ") FRE (n) formunda, üç farklı fonksiyon vardır:
• (n) -1 ise, heap'in serbest byte miktarını verir.
• (n) -2 ise, stack'in asla kullanılamayan byte miktarını verir.
• (n) bunlardan farklı bir sayı ise ya da FRE (" ") fonksiyonunu kullanıyorsanız, data segmentlerinin serbest miktarını öğrenebilirsiniz.
Gelecek ay Amiga Basic'te obje yaratma konusunu inceleyecek ve yapısal özelliklere devam edeceğiz. Hoşça kalın.
İŞ DÜNYASI