AMIGA BASIC
Retro bilgisayar
Merhaba... Bu ay PSET komutu ile AmigaBasic komutlarını incelemeyi sürdüreceğiz.
PSET KOMUTU: Kullanım Şekli: PSET [STEP] (x,y) [renk-no] Bu komut, o an aktif olan çıktı penceresinin x ve y koordinatlarına renk-no ile belirtilen renkte bir pixel (nokta) yerleştirir. x,y koordinatlarının sınırı, ekran moduna ve pencere genişliğine bağlı olarak verilmelidir ve normal olarak mutlak bir pixel yerleşimidir. STEP opsiyonu kullanılırsa, x ve y koordinatları son çizim noktasına oranlanarak hesaplanır, renk-no kullanılırsa, pixel bu renkte çizilir; verilmezse, PSET tanımlı önzemin rengini kullanır. Renk numarası, 0'dan 31'e kadar bir sayı ile yine ekran moduna bağlı olarak verilir.
Aşağıdaki örnek, rasgele noktalar tespit edip bin tane yıldız çizer:
FOR 1=1 TO 1000
x=INT(RND*620)
y=INT(RND*200)
PSET(x,y)
NEXT I
PTAB KOMUTU: Kullanım Şekli: PRINT PTAB(x) Bu fonksiyon, yazı pozisyonunu bulunduğu pozisyonda yatay olarak x. pixele kaydırır ve sadece PRINT yönergesi ile kullanılır. x, 0-32767 sınırları arasında bir sayı olabilir. 0, satırın en sol pozisyonunu ifade eder.
PTAB, TAB gibi çalışır; fakat TAB karakter pozisyonunu verirken, PTAB pixel pozisyonunu ayarlar.
FOR x=0 to 100
PRINT PTAB(x);"Merhaba!"
NEXT x
örneğini çalıştırın ve sonucu görün.
PUT KOMUTU: Kullanım Şekli: 1. PUT [#] dosya-no [,kayıt-no] 2. PUT [STEP](x,y),dizi[(indeks[,indeks .....])] [,yerleştirme-modu]
Bu komutun birinci kullanım şekli ile, bir rasgele erişimli dosyaya buffer'dan kayıt yazabilir; ikinci kullanım şekliyle de GET yönergesi ile elde edilmiş grafik resmi ekrana çizdirebilirsiniz. Bu iki kullanım şeklinden birincisi "Random File PUT", ikincisi "Screen PUT" olarak adlandırılır. Her iki kullanımı da sırayla inceleyelim:
Random File PUT: Bu komut, bir random dosyanın kayıt buffer'ındaki datayı diskete kaydeder. dosya-no, o an açık olan dosyanın numarasıdır. kayıt-no yazılmazsa, AmigaBasic, son PUT yönergesi ile data yazılan kayıttan bir sonraki kayıt numarasını kullanacaktır. En küçük kayıt-no 1, en büyük kayıt-no 16777215 olabilir.
PRINT#, PRINT# USING ve WRITE# komutları, bir PUT yönergesi çalıştırılmadan önce dataları rasgele dosya buffer'ına yerleştirirler. Fakat en iyisi, buffer'ın FIELD ve LSET ya da RSET komutlarıyla doldurulmasıdır. Aşağıdaki örneği inceleyelim:
OPEN "ADRESLER" AS # 1 LEN=78
FIELD#1,20 AS Isim$,30 AS Adres$,20
AS Sehir$,8 AS Bakiye$
INPUT "Okuma/Yazma (o/y)";oy$
INPUT "Kayit No ";kn
IF kn=0 THEN END
IF oy$="o" THEN KayitOku
LINE INPUT "ISIM :";t$:LSET Isim$=t$
LINE INPUT "ADRES:";t$:LSET Adres$=t$
LINE INPUT "SEHIR:";t$:LSET Sehir$=t$
LINE INPUT "BAKİYE:";t$ :b#=VAL(t$)
:LSET Bakiye$=MKD$(b#)
PUT#l,kn :REM Bilgiler kaydedildi...
CLOSE#l
RUN
KayitOku:
GET#l,kn
PRINT "ISIM :";Isim$
PRINT "ADRES :";Adres$
PRINT "SEHIR :";Sehir$
PRINT "BAKİYE:";CVD(Bakiye$)
CLOSE#l
PRINT
LINE INPUT "RETURN'e BASIN:";t$
RUN
Örneğimizde, önce bir rasgele erişimli dosya açıyor ve alanlar için uzunluk tanımlamalarını yapıyoruz. Okuma ve yazma için tercih yapıldıktan sonra, program istenen yere dallanarak çalışmasını sürdürüyor. PUT komutunun çalışmasını rahatlıkla anlayabileceğiniz güzel bir örnek.
Screen PUT: Gelelim PUT komutunun ekrana grafik çizdirmek için kullanımına. Bu kullanımda PUT, ekranın x,y noktasını resmin sol üst köşesi kabul ederek o anki çıktı penceresine getirir, x ve y, normal olarak mutlak bir yerleşimi belirtir; STEP kullanılırsa, son yerleşim noktasına oranlanarak hesaplanır. Resim, daha önceden GET komutu ile dizi içerisine yerleştirilmiştir. Yani dizi argümanı, resmi tutan diziye verilmiş olan isimdir, indeks, bir dizi içerisine birden fazla obje koymaya izin veren çok boyutlu diziler kullanıldığında belirtilir.
yerleştirme-modu, resmin ekrana hangi yolla yerleştirileceğini belirten argümandır:
PSET: Data, olduğu gibi ekran alanının üzerine çizilecektir.
PRESET: Resmin renkleri invert hale getirilecek yani tersine çevrilecektir.
AND, OR ve XOR: Resim segmentinin renkleri, arka planın rengi ile kullanılan operatöre uygun olarak mantıksal olarak karşılaştırılır ve uygun şekilde görüntülenir. Tanımlı olan mod, XOR'dur.
Aşağıdaki örneği yazın ve çalıştırın: hoşunuza gidecek.
DIM dizi%(563)
CIRCLE(50,20).40
CIRCLE(35,12),5
CIRCLE(65.12).5
CIRCLE(50,20),8
CIRCLE(50,18),30„3.5.5.8
PAINT (50,20),3,1
GET (0,0)-(99,39),dizi%
CLS
FOR x=0 TO 5
FOR y=0 TO 4
PUT( x*100,y*40),dizi%
NEXT y
NEXT x
Programın PUT komutunu içeren satırı-
na yerleştirme-modu argümanını ekleye-
rek deneyin:
PUT (x*100,y*40),dizi%.PSET
PUT (x* 100,y*40),dizi% .PRESET
PUT (x*100,y*40),dizi%,AND
PUT (x* 100,y*40),dizi%.OR
RANDOMIZE KOMUTU: Kullanım Şekli: RANDOMIZE |v) RANDOMIZE TIMER RND ile rasgele üretilen sayılar kullanı-
AMIGA BASIC

yorsanız, programı her çalıştırışınızda aynı değerleri elde edersiniz. RANDOMIZE komutu, rasgele sayı üretecini başlangıçtaki durumuna döndürerek yeni bir seri rasgele sayı üretilmesini sağlar. x argümanı, -32768 ile 32767 arasında bir sayı olarak verilir ve bu sayı rasgele sayı hesaplamalarında kullanılır. Aynı sayı iki kez üst üste girilirse, aynı sayı dizisi elde edilir. Herhangi bir değer vermezseniz, AmigaBasic bu değeri girmenizi ister: Random Number Seed (-32768 to 32767) ?
Bu değeri elle girmek istemezseniz, komutun ikinci şeklini kullanmalısınız. Bu durumda, AmigaBasic hesaplamalarda o anki zamanı kullanır. Bu şekilde gerçek rasgele sayılar üretilebilir ve programınız her çalıştırılışında farklı bir rasgele sayı dizisi oluşur.
READ KOMUTU: Kullanım Şekli: READ değişken-listesi Bir DATA satırından bir değer okuyarak takip eden değişken içine yerleştirir. Değişken, okunan değerle aynı tip olmalıdır; yani bir sayı değişkenine yazısal değer, yazısal dizi değişkenine de sayısal bir değer okunamaz, aksi takdirde bir "Syntax error" mesajı oluşur.
Tek bir READ komutu, bir ya da daha fazla DATA yönergesine erişebilir; ya da birçok READ komutu aynı DATA satırını kullanabilir, değişken listesindeki değişken sayısı, DATA satırındaki değerlerden fazlaysa, "Out of data" hatası ortaya çıkar.
READ komutu, dataları okurken bir DATA İŞARETÇİSİ kullanır. Bu işaretçi, son okunan datayı gösterir ve RESTORE ile başa alınmadıkça, okuma işlemi bu işaretçiden itibaren yapılır. Bir örnekle bu komutu da tamamlayalım:
READ A$,B$
PRINT AŞ;B$
DATA "HERKESE "/'MERHABA!"

REM KOMUTU: Kullanım Şekli: REM [mesaj] Programın rahat incelenebilmesi için satırlar arasına açıklama koymak için kullanılır. İşlevsel açıdan hiçbir fonksiyonu yoktur, komuttan sonra yazılanlar umursanmaz. Bir program satırının son komutu olabileceği gibi, bir satırda tek başına da bulunabilir, mesaj, gereken açıklamaların yapıldığı yerdir. REM komutu yerine tek tırnak işareti (') de kullanılabilir.
RESTORE KOMUTU: Kullanım Şekli: RESTORE [satır] READ komutunu açıklarken de bahsettiğimiz RESTORE komutu, data işaretçisinin data satırının başına gelmesini sağlayarak yeniden okunmasını sağlar, satır argümanı kullanılırsa, oradan sonraki ilk data satırının başına gelen data işaretçisi; satır numarası verilmediğinde, programın ilk data satırına geri döner.
RESUME KOMUTU: Kullanım Şekli: RESUME [0] RESUME NEXT RESUME satır RESUME komutu, bir hata nedeniyle programın kesilen çalışmasını devam ettirir. RESUME ya da RESUME[0], programın çalışmasını hataya sebep olan yönergeden; RESUME NEXT, hatanın oluştuğu satırın bir sonrasından ve RESUME satır, belirtilen satırdan itibaren başlatır.
RESUME yönergesi, bir error-handling rutini (hatırladınız mı?) içerisinde değilse, "RESUME without error" hata mesajı verir.
İşte komutun kullanımına güzel bir altrutin örneği:
ErrorYakala:
BEEP
IF ERR=53 THEN
uyar$="DOSYA BULUNAMADI"
GOTO ErrorCik
ENDIF
IFERR=61THEN
uyar$="DISK DOLU"
GOTO ErrorCik
EndlF
uyar$="HATANUMARASI"+STR$(ERR)
ErrorCik:
scrid=-1
CALL Requester (uyar$,"","Retry","CANCEL", 2,cevap%)
IF cevap%=0 THEN
CLOSE l
RESUME Anamenu
ELSE
CLOSE 1
ON ERROR GOTO ErrorYakala
RESUME
ENDIF
RETURN KOMUTU: Kullanım Şekli: RETURN satır Program kontrolü bir altrutinden geri döner. GOTO ya da GOSUB gibi yönergelerle bir altrutine atlayan program, RETURN komutu ile satır argümanı verilmemişse dallanma komutunun bir alt satırına geri döner ve oradan çalışmasına devam eder. satır belirtilirse, o satıra geri döner.
Şimdi sonsuz döngüde kalıp sol mouse tuşuna basıldığını haber veren bir program örneği verelim:
a=-l
ON MOUSE GOSUB MouseKlik
MOUSE ON
PRINT "Sol mouse tuşuna basin"
WHILE a:WEND
MouseKlik:
PRINT "Buton kliklendi"
RETURN
Program, mouse tuşuna basılana kadar sonsuz bir döngüde bekliyor; mouse kliklendiğinde MouseKlik altrutinine dallanıyor ve RETURN komutuyla döngüye geri dönüyor.
Bu aylık da bu kadar. Gelecek ay yine birlikte olalım. Hoşça kalın....
