AMİGA BASIC
Retro bilgisayar
İFADE VE DEĞİŞKENLER İfadeler; sabitler, değişkenler ve operatörler ile birleştirilmiş diğer ifadelerin kombinasyonlarıdır. Derleyici tarafından bir dizi ya da sayısal değer üretecek şekilde değerlendirilir. Operatörler ise değerler üzerine matematiksel ya da mantıksal işlemler yaparlar ve Amiga Basic içinde 4 kategoriye ayrılırlar: aritmetik operatörler, kıyaslama operatörleri, mantıksal operatörler, fonksiyonel operatörler. Operatörler, kendi içlerinde öncelik sırasına göre hiyerarşik bir yapıya sahiptir. Yani bir yönerge içinde birçok operatör kullanılıyorsa, bazı operatörlerin işlemleri öncelik sırasına göre diğerlerinden daha önce yapılır. Yönergedeki işlemlerin öncelik sıraları eşitse, soldan sağa doğru sıra takip edilir. Operatörlerin öncelik sırası şöyledir:
1. Üs alma 2. Negatifleme 3. Çarpma ve kayan-noktalı bölme 4. Tamsayı bölme 5. Moduler aritmetik 6. Toplama ve çıkarma 7. Kıyaslama operatörleri 8. NOT 9. AND
10. OR ve XOR 11. EQV 12. IMP ARİTMETİK OPERATÖRLER:
Amiga Basic'in aritmetik operatörleri aşağıdaki tabloda öncelik sırasına göre listelenmiştir:
AMİGA BASIC
Operatör İşlem Örnek A Üs alma X^Y - Negatifleme -X * Çarpma X*Y / Kayan-noktalı bölme X/Y \ Tamsayı bölme X\Y MOD Modulo aritmetik Y MOD Z
+,- Toplama X+Y Çıkarma X-Y
Kullanılan operatörlerin işlemdeki öncelik sırasını değiştirmek için parantezler kullanılır. Öncelik sırasına bakılmaksızın parantez içindeki işlemler önce yapılır. Aşağıdaki örnekler bazı cebirsel fonksiyonların Amiga Basic içinde kullanımlarını göstermektedir:
Cebirsel Amiga Basic Fonksiyon İfadesi X-Z (X-Z)/Y Y XY X*Y/Z Z X±Y (X+Y)/Z Z
(X2)Y (XA2)AY
YZ X
X(-Y) X*(-Y)
TAMSAYI BÖLME: Amiga Basic programlarda tamsayı bölme, ters bölü (backslash) '\' işaretiyle tanımlanır. Normal bölü (slash) işareti ise kayan-noktalı bölümleri ifade eder. Tamsayı bölümler (kısa tamsayılar için -32768'den +32767'ye, uzun tamsayılar ise -2147483648'den 2147483647'ye kadar) noktadan sonrası atılarak tamsayıya yuvarlanır. Örneğin: 11\3 = 3
X=20/6
Y=34.78\5.87
PRINTX,Y
MODULO ARİTMETİK:
MOD operatörü ile tanımlanırlar. Modulo aritmetik, tamsayı bölümlerin tamsayı kalanını verir. Örneğin:
18.6 MOD 5=4 (19\5=3 kalan 4) 34.25 MOD 7.88=2 (34\8=4 kalan 2) Modulo aritmetikte bölen ve bölünen tamsayılar MOD işlemi için yuvarlanır. Overflow ve Division by zero mesajları:
Bir ifadenin değerlendirilmesi sırasında sıfır ile bölme yapılırsa, "Division by zero" hata mesajı görüntülenir. Amiga bölümün sonucuna bir sonsuzluk işareti koyar ve çalışmasını sürdürür. Sonuçta taşma olursa, program sonucu negatif ya da pozitif işaretlerle doldurur ve çalışmasına devam eder.
KIYASLAMA OPERATÖRLERİ:
İki değeri karşılaştırmak için kullanılırlar. Kıyaslama sonucu ya doğru (true = -1) ya da yanlış (false = 0) olur. Bu sonuçlar genellikle programın akışındaki karar aşamalarında dallanmalarda kullanılır. Aşağıdaki tabloda kıyaslama operatörleri ve fonksiyonlarını örnekleri ile inceleyebilirsiniz: Operatör Fonksiyonu İfadesi = Eşittir X = Y <> Eşit değildir X <> Y < Küçüktür X < Y > Büyüktür X > Y <= Küçük ya da eşit X <= Y >= Büyük ya da eşit X >= Y MANTIKSAL OPERATÖRLER:
Mantıksal operatörler kıyaslama türü ilişkileri test ederek doğru-yanlış bilgi kombinasyonlarından bir bitlik sonuç çıkartırlar. Sonuç doğru ise -1, yanlış ise 0 olur. Doğru-yanlış kombinasyonları ve mantıksal işlemlerin sonuçları "Doğrulama Tablosu" olarak tanınır. Amiga Basic'te 6 mantıksal operatör vardır: NOT (mantıksal tamamlama), AND (birleşme), OR (ayrılma), XOR (ters OR), IMP (karıştırma) ve EQV (eşitlik). Aşağıdaki tabloda öncelik sıralarına göre doğrulama tabloları verilmiştir. Tablolarda X ve Y değerlerinin alacağı yanlış ya da doğru durumlarının sonucu nasıl etkilediği görülecektir.
İŞLEM DEĞER DEĞER SONUÇ NOT X NOT X DOĞRU YANLIŞ YANLIŞ DOĞRU
AND X Y XANDY
DOĞRU DOĞRU DOĞRU DOĞRU YANLIŞ YANLIŞ YANLIŞ DOĞRU YANLIŞ YANLIŞ YANLIŞ YANLIŞ OR X Y X ORY
DOĞRU DOĞRU DOĞRU DOĞRU YANLIŞ DOĞRU YANLIŞ DOĞRU DOĞRU YANLIŞ YANLIŞ YANLIŞ XOR X Y X ORY DOĞRU DOĞRU YANLIŞ DOĞRU YANLIŞ DOĞRU YANLIŞ DOĞRU DOĞRU YANLIŞ YANLIŞ YANLIŞ
IMP X Y XIMPY DOĞRU DOĞRU DOĞRU DOĞRU YANLIŞ YANLIŞ YANLIŞ DOĞRU DOĞRU YANLIŞ YANLIŞ DOĞRU EQV X Y XEQVY DOĞRU DOĞRU DOĞRU DOĞRU YANLIŞ YANLIŞ YANLIŞ DOĞRU YANLIŞ YANLIŞ YANLIŞ DOĞRU
İfadeler içindeki mantıksal operatörler aritmetik ve kıyaslama operatörlerinden sonra yapılır.
OPERATÖRLERİN YAZISAL
DİZİ DEĞİŞKENLERİNDE
KULLANIMI:
Bir yazısal dizi ifadesi; dizi sabitleri, dizi değişkenleri ve operatörler ile bağlanmış diğer dizi ifadelerinden oluşur. Yazısal dizilerde kullanılabilecek operatörler üç başlık altında düşünülebilir: Birleştirme, Kıyaslama ve Fonksiyonel.
Birleştirme: İki yazısal dizi bilgisini birleştirmek için + sembolü kullanılır. Şimdi isim ve soyad sorarak, merhaba diyecek bir program örneğinde birleştirme işlemini görelim:
INPUT "ADI: ";A$
INPUT "SOYADI: ";B$
PRINT A$ + B$
PRINT "Merhaba,"+ A$ +M M+ B$
END
İkinci PRINT yönergesinde kullanılan " ", adı ve soyadı arasına bir boşluk karakteri koyar.
Kıyaslama: Bu tür operatörler yazısal dizileri karşılaştırmak için kullanılırlar. Sayısal dizileri karşılaştırmak için kullanılan operatörler aynen kullanılır. Yazısal dizilerin sayısal değerlerle yapılan kıyaslamalarında karakterlerin ASCII değerleri, yine yazı dizileri ile karşılaştırılmalarında ise alfabetik sıra kullanılır. Birbiri ile kıyaslanan tırnak içindeki yazılar, ilk karakterden başlanarak sırayla kontrol edilirler. Aşağıda bu tür işlemler için kullanılan bazı ifade örnekleri verilmiştir:
"DC" < "EN" "Dosyaadı" = "Dosyaadı" "X& " >= "X#" "SN " <> "SN" "KG" <= "kg" "AZİM" < "AZİME"
YÖNERGELER
& FONKSİYONLAR: Artık
sıra geldi Amiga Basic'te kullanılan komutları incelemeye. Bu bölümden itibaren, Amiga Basic'te bulunan 130 komut ve fonksiyonu tanımlamaya başlıyoruz. Yani ancak şimdi Amiga Basic'te programlamaya adım atıyoruz. Tabii, şimdiye kadarki kullanım temellerini esas alarak. Komutları, alfabetik sırayla ve doğru kullanım şekillerini vererek inceleyeceğiz. Kullanım şekillerini anlatırken farklı notasyonlar vereceğiz. Büyük harf yazılan kısımlar komut ya da fonksiyonun kendisidir, yazım esnasında büyük harf yazılmasalar bile RETURN tuşuna basıldığında veya kursor satır atlatıldığında büyük harfe çevrilecektir. İtalik yazılan kısımlar kullanıcı tarafından girilecek bilgi bölümlerini ifade eder. Köşeli parantezler arasına ([ ve ]) yazılanlar, opsiyoneldir. Yani kullanılması zorunlu değildir, gerekirse kullanılırlar. Süslü parantezler arasında verilen bilgiler, kullanıcının iki ya da daha fazla seçenekten birini seçmesi gerektiğinde kullanılır ve bu bilgiler birbirinden dik çubuklarla ayrılır. Normal parantezler ise kullanıcının gireceği bilgi bölümlerini gösterir. Komutların devamı olan ve kullanıcının gireceği bilgi için, sınırlama yoksa "........." şeklinde belirtilmiştir.
ABS KOMUTU:
Kullanım şekli: ABS(X)
Verilen X sayısının mutlak değerini verir. Aşağıdaki örnekte ABS komutunun aynı sayının pozitifi ve negatifi için vereceği sonucu görebilirsiniz:
LET X=345 : LET Y=-345
PRINT ABS(X), ABS(Y)
Sonuç:
345 345

AREA KOMUTU:
Kullanım şekli: AREA [STEP] (XX)
AREAFILL yönergesi ile çizdirilecek olan poligonun bir noktasını tanımlamak için kullanılır.
X ve Y parametreleri ile verilen noktalar AREAFILL yönergesi için birleştirilerek poligonu ortaya çıkarır. AREA yönergesi ile verilen noktalar 20'den fazla olursa, AREAFILL yönergesi tarafından umursanmaz.
STEP kullanılırsa, X ve Y noktaları o anki grafik kalem pozisyonundan başlar. Kullanılmazsa, belirtilen yerleşimler, o anki penceredeki bir yerin mutlak değerleri olur.
AREAFILL KOMUTU:
Kullanım şekli: AREAFILL [mod]
AREA yönergesindeki öncelik sırasıyla tanımlanan poligonların içlerini değiştirme komutudur.
mod parametresi, poligonun formatını tespit eder:
0 PATTERN yönergesi ile belirtilen uçla alanı doldurur. Tanımlı mod budur.
1 Alanı tersine çevirir.
Aşağıdaki örnek bir üçgen çizer ve içini doldurur:
AREA (10,10)
AREA STEP (0,40)
AREA STEP (40,-40)
AREAFILL
ASC KOMUTU:
Kullanım şekli: ASC(X$)
X$ yazısal dizisinin ilk karakterinin ASCII kod karşılığı olan sayısal değeri verir. Aşağıdaki örnekte ASC fonksiyonunun kullanımını görebilirsiniz:
LET A$="EM
PRINT ASC(A$)
END
Sonuç:
ATN KOMUTU:
Kullanım şekli: ATN(X)
Radyan cinsinden verilen X açısının arktanjant değerini verir. Sonuç, -pi/2 ile pi/2 radyan arasındadır. Verilen X değeri tek açıklıkta ise bu modda, çift açıklıkta ise bu modda değerlendirilir.
Örnek:
yenisayı:
INPUT "Bir sayı girin ", SAYI
PRINT SAYI"açısının arktanjantı"
ATN(SAYI) ",dır."
INPUT "Başka sayınız var mı? e/h ", CEVAP$
IF CEVAP$="E" GOTO yenisayı
END
Sonuç:
Bir sayı girin 33
33 açısının arktanjantı 1.540503'dır.
Başka sayınız var mı? e/h e
Bir sayı girin 2 33 açısının arktanjantı 1.107149'dur. Başka sayınız var mı? e/h h
BEEP KOMUTU:
Kullanım şekli: BEEP
Beep şeklinde bir düdük sesi üretir ve ekranı parlatıp söndürür. Genellikle hata uyarıları için kullanılır.
Örnek:
IF Kalanbellek& < 100 THEN
BEEP
LOCATE 17,1
PRINT "BELLEK YETERSİZ: Pencereyi
küçültün";
ENDIF
BREAK ON BREAK OFF BREAK STOP KOMUTLARI:
Kullanım şekilleri: BREAK ON BREAK OFF BREAK STOP
Amiga Basic'in çok önemli bir özelliği olan "EVENT TRAPPING" ile ilgili komutlarıdır. Peki nedir bu event trapping? Normalde bir program bildiğiniz gibi, herhangi bir yerde GOTO, GOSUB ya da CALL yönergeleri ile karşılaşmadıkça satır satır sırayla çalışır. İşte program bu komutlarla karşılaştığında, kesinti (interrupt) diye adlandırılan durum ortaya çıkar. Event trapping de Basic'teki bir interrupt'tır. Programın bazı yerlerinde, genellikle başlangıç bölümlerinde, Amiga Basic'e mevcut bir koşulu kontrol etmesini istediğinizi belirten bir yönerge verebilirsiniz. İşte kontrol koşuluna göre ilgili event trapping aktif (ON) değilse, bu tür dallanmalar mümkün olmaz.
Programı durdurmak için kullanılan event trapping komutlarıdır. Sırayla program çalışmasını kesmeye imkan verir, kaldırır ve durdururlar. BREAK ON komutu ile event trapping aktif hale getirildiğinde, kullanıcı Amiga-nokta, CTRL-C ya da CTRL-F3 tuşlarına birlikte basarak ya da Run menüden Stop kalemini seçerek programı durdurabilir. BREAK OFF yönergesi ON BREAK imkanını BREAK ON komutu çalıştırılana kadar ortadan kaldırır. BREAK STOP ise, BREAK dallanmasını geçici olarak durdurur. Koşul dallanması devam eder, fakat Amiga Basic ON BREAK ......GOSUB yönergesini BREAK ON görene kadar çalıştırmaz.

Örnek:
BREAK ON
ON BREAK GOSUB ALT
DIM ADET(99),FİYAT(99)
LET TOPLAM=99
OPEN "O",#1, "STOK"
FOR I=1 TO TOPLAM
WRITTE#1 ,ADET(I),FİYAT(I)
NEXT I
CLOSE#1:BREAK OFF
INPUT "Yazıcı çıktısı ? E?H", CEVAP$
IF CEVAP$="Y" THEN BREAK ON:
GOSUP KONTROL
END
ALT:
CLS:BEEP:PRINT "Şu anda programdan
çftmazsınız"
RETURN
CALL KOMUTU:
Kullanım şekli: CALL alt rutin ismi [(argüman-listesi)] isim [argüman-listesi]
SUB ile tanımlanmış bir alt programa kontrol transferi yapılabilir, bir makina dili program ya da sistem library rutini sabit bir bellek adresine depolanabilir. CALL ile bir alt program çağrıldığında parametreler sayısal ya da yazısal sabit veya değişken olabilir ve bunlar alt programa geçirilebileceği gibi, alt programın değerleri de program tarafından kabul edilir.
Programlarınızda kullanacağınız en önemli komutlardan biridir. CALL komutu ile, SUB yönergesi ile tanımlanan bir alt programı, sabit adresli bir makina dili alt rutini ya da yine makina dili bir LIBRARY (kütüphane) rutinini çağırabilirsiniz. Komutta CALL kelimesinin kullanımı opsiyoneldir. Kullanılmazsa, argüman listesi parantez içine alınmaz.
Sub yönergesini kullanan bir alt programı çağırırken değişkenlerin geçişi tanımlanır, ifadeler değer olarak geçecektir. Örneğin:
SUB ALT (x,y) STATIC
END SUB
CALL ALT (a,b)
Alt rutinle program arasındaki değişken
geçişlerinden yazımızın önceki bölümle-
rinde bahsetmiştik.
Amiga Basic, makina dili rutinleri transfer etmenin bir yoludur. İsim alt rutinin bellekteki başlama noktasını (adres) ifade eden basit bir değişken belirtir, bir dizi elemanı olamaz. Argüman listesi, alt rutine geçecek argümanları listeler. Parametreler de, uzun ya da kısa tamsayılar olmalıdır, standart C-dili çağırma kurallarının kullandığı değerle geçebilir. Aksi takdirde Amiga Basic "Type mismatch" mesajı verir. Adres, tek ya da çift açıklıkta olabilir: CALL Rutin(VARPTR(x)) Adres yazısal dizi olursa:

CALL Rutin(SADD(x$)) Aşağıdaki örnekte, değişkenler kısa tamsayı (&) olarak adresi tutarlar. Kısa tamsayı adreslerin 24 bit kullanmayı unutmayın. a=0:b=0
DIM Kod%(100)
FOR I=0 to 90
READ Kod%(I)
NEXT I
KodAd&=VARPTR( Kod%(0))
CALL KodAd&(a.b)
Kütüphaneler Amiga'nın özel düzenlen-
miş kaynak dosyalarıdır. Bir LIBRARY'den makina dili altrutin çağırmak için: LIBRARY "graphics.library" CALL Çizim(50,60) Bu örnekle Amiga Basic Çizim adıyla bir değişken yaratır. Bu bilgiler daha sonra makina dilindeki yerlerine değişken ismi ile saklanır. Bu nedenle değişken kısa tamsayı olamaz.
Aşağıdaki örnek, bir "Type Mismatch" hatası üretir:
DEFINT A-Z CALL Çizim(50,60) Aynı örneğin doğrusu: DEFINT A-Z CALL Çizim#(50,60) Gelecek ay görüşmek üzere........