AMIGA BASIC
Retro bilgisayar
Merhaba... Bir aylık aradan sonra, yine birlikteyiz. Okuyucularımızın çoğu, BASIC sayfalarının azlığından ve yeterince hızlı ilerlemediğinden şikayet ediyorlar. Haklılar. Biz de bu kadar ağır gitmekten şikayetçiyiz ama, hem sayfa sorunumuz var; hem de yeni başlayan Amiga'cıların adapte olma sorunlarını göz ardı edemiyoruz. Her iki tür okuyucumuzu üzmeyecek şekilde bir çözüm bulabileceğimizden eminiz. İlginize teşekkür ediyoruz.
MID$ KOMUTU: Kullanım Şekli:
MID$(yazısal dizi$, başlangıç pozisyonu [,uzunluk])
MID$(yazısal dizi1$, başlangıç pozisyonu [,uzunluk])=değiştirilecek yazısal dizi2$
Bu yönerge, bir yazısal dizinin bir bölümünü bir diğer yazısal dizi ile değiştirmek için kullanılır.
Birinci kullanım şeklinde MID$ fonksiyonu, yazısal dizi$ içindeki karakter dizisinin başlangıç pozisyonu ile verilen değerden itibarenki kısmını verir, uzunluk argümanı kullanılmışsa; bu, MID$ tarafından alınacak karakter sayısını tanımlar, uzunluk değeri verilmemişse, belirtilen başlangıç pozisyonundan sonraki tüm karakterler dahil edilir.
Örneğin;
MID$("En büyük AMIGA!",10,5)
komutu,
AMIGA sonucunu üretir.
İkinci kullanım şeklinde, yazısal dizi1$'ın istenen bölümü verilen yazısal dizi2$ ile değiştirilir. Değiştirme işlemi, başlangıç pozisyonundan itibaren yapılır. Uzunluk belirtilmişse, yazısal dizi2$ içinden kaç karakter alınacağı belirlenmiş olur.
a$= "En büyük AMIGA!"
MID$(a$, 10)= "kimmiş"
örneği, "AMIGA!" karakterlerini "kimmiş" ile değiştirir ve;
En büyük kimmiş karakter dizisini oluşturur.
Her iki kullanım şeklinde de, başlangıç pozisyonu ve uzunluk değerleri 1 ile 32767 arasında verilebilir.
MKI$ MKL$ MKS$ MKD$ KOMUTLARI: Kullanım Şekilleri:
MKI$(16 bit tamsayı) MKL$(32 bit tamsayı) MKS$(tek açıklıkta ondalık sayı) MKD$(çift açıklıkta ondalık sayı)
Rasgele dosya buffer'ına yerleştirilmek üzere, yazısal dizi değişkenleri için sayısal değerler atamayı sağlayan fonksiyonlardır. CV* komutlarında rasgele dosya'dan okunan değişkenlerin orijinal hallerine çevrilmesi gerektiğinden söz etmiştik hatırlarsanız.
MKI$, 16 bitlik bir kısa tamsayıyı, 2 byte uzunluğunda yazısal diziye;
MKL$, 32 bitlik bir uzun tamsayıyı, 4 byte uzunluğunda yazısal diziye;
MKS$, tek açıklıkta ondalık sayıyı, 4 byte uzunluğunda bir yazısal diziye;
MKD$, çift açıklıkta bir ondalık sayıyı, 8 byte uzunluğunda bir yazısal diziye çevirir.
Sayısal değişkenler, bir rasgele erişimli dosya içine yerleştirilmeden önce yazısal dizi değişkenlerine çevrilmelidirler. İşte bu işlem için yukarıdaki komutlar kullanılır. Çevrim işleminden sonra, değişkenler rasgele dosya buffer'ına LSET ya da RSET komutlarından biri ile yerleştirilir ve PUT# ile dosyaya yazılır.
Sayısal değişken tipleri, sembolleri ve kullanılacak MK*$, CV* fonksiyonları için aşağıdaki tabloyu inceleyin.
Değişken tipi Sembol Uzunluk(byte) Fonksiyon
Tamsayı % 2 MKI$, CVI Uzun tamsayı & 4 MKL$, CVL Tek açıklık ! 4 MKS$, CVS Çift açıklık # 8 MKD$, CVD
Aşağıdaki örnek programı inceleyin:
OPEN "Adresler" AS#1 LEN=78
FIELD #1,20 AS Ad$,30 AS Adr$,20
AS S$,8 AS TEL$
INPUT "Okuma-Yazma (o/y)";x$
INPUT "Hangi kayıt";m
IF rn=0 THEN END
IF x$="o" THEN Kayıt Oku
LINE INPUT "Adı: ";t$: LSET Ad$=t$
LINE INPUT "Adres: ";t$: LSET Adr$=t$
LINE INPUT "Şehir: ";t$: LSET S$=t$
LINE INPUT "Telefon: ";t$:
b#=VAL(t$): LSETTELS: MKD$(b#)
PUT#l,rn
CLOSE#1
RUN
Kayıt Oku:
GET#l,rn
PRINT "Adı: ";Ad$
PRINT "Adres: ";Adr$
PRINT :Şehir: ";S$
PRINT :Tel: ";CVD(TEL$)
CLOSE#l: LINE INPUT "Return'e
Basın:";t$
RUN
Program, adres dosyalarına basit bir örnek. Önce bir kaydı girebilir; sonra da isterseniz okuyabilirsiniz.
MOUSE KOMUTU: Kullanım Şekli:
MOUSE(X)
MOUSE fonksiyonu, mouse'un sol düğmesi ve mouse hareketlerini kontrol eder ve bilgi verir.
Parantez içinde verilen X, 0 ile 6 arasında bir sayı olabilir. MOUSE(0), sol mouse düğmesinin durumunu gösterir. Programda bir MOUSE(0) fonksiyonu çalıştığında, Amiga Basic mouse'un o anki durumunu not eder. MOUSE(0) aşağıdaki değerleri alabilir:
MOUSE(0)=0 Sol mouse tuşuna basılı değildir. Ve sol mouse tuşuna son MOUSE(0) çalıştırıldığından beri de basılmamıştır.
MOUSE(0)=1 Düğme basılı değildir, fakat son MOUSE(0) fonksiyonundan sonra bir kez kliklenmiştir.
MOUSE(0)=2 Sol mouse tuşu o anda basılı değildir, fakat son MOUSE(0) çalıştığından beri iki kez kliklenmiştir.
MOUSE(0)=3 Yine mouse tuşu basılı değildir; ancak fonksiyonun son çağrılışından sonra üç ya da daha çok kliklenmiştir.
MOUSE(0)=-1 Sol mouse düğmesi bir kez basılmıştır ve hala basılıdır.
MOUSE(0)=-2 ve -3 Mouse'un sol düğmesi iki(-2) ya da üç(-3) kere kliklenmiştir ve hala basılı durumdadır.
x değerinin fonksiyonda alabileceği diğer değerler ve neleri temsil ettikleri aşağıda listelenmiştir.
MOUSE(1) MOUSE(0)'ın son çağırılışından sonra, mouse işaretçisinin o anki yatay koordinatını(x koordinatını) verir.
MOUSE(2) MOUSE(0)'ın son çağırılışından sonra mouse işaretçisinin o anki dikey koordinatını(y koordinatını) verir.
MOUSE(3) MOUSE(0) çağırılmadan önce, mouse işaretçisinin mouse'un sol düğmesine son basıldığı zamanki başlangıç yatay koordinatını verir. MOUSE(4) MOUSE(0) çağırılmadan önce, mouse işaretçisinin mouse'un sol düğmesine son basıldığı zamanki başlangıç dikey koordinatını verir. MOUSE(5) MOUSE(0) çağırılmadan önce, mouse işaretçisinin mouse'un sol düğmesine son basıldığı zamanki bitiş pozisyonunun X koordinatını(yatay) verir. MOUSE(6) MOUSE(0) çağırılmadan önce mouse işaretçisinin mouse'un sol düğmesine son basıldığı zamanki bitiş pozisyonunun Y koordinatını(dikey) verir.
Aşağıdaki örnek mouse hareketlerini kontrol eden bir rutinden oluşuyor. Bu rutin mouse hareketlerine uygun olarak P dizisi içindeki bir grafiği yeni X ve Y koordinatları ile belirlenen pozisyona yerleştirir:
Mouse Kontrol:
IF MOUSE(0)=0 THEN MouseKontrol
IF ABS(X MOUSE(l))>2 THEN Resmi
Oynat
IF ABS(Y-MOUSE(2))<3 THEN
Mouse
kontrol
Resmi Oynat;
PUT(X,Y),P
X=MOUSE( 1): Y=MOUSE(2)
PUT (X,Y),P
GOTO Mouse Kontrol
MOUSE ON MOUSE OFF MOUSE STOP KOMUTLARI: Kullanım Şekilleri:
MOUSE ON MOUSE OFF MOUSE STOP
Bu komutlar mouse için dallanmaları (event trapping), sırasıyla aktif hale getirir, kapatır ve bekletir. Bir mouse kliki zaman zaman program içinde dallanmalar için kontrol edilebilir. MOUSE ON yönergesi, dallanmanın mouse düğmesine basmasını kontrol ederek mouse dallanmalarına imkan verir.
MOUSE OFF kapatır; MOUSE STOP ise bir sonraki MOUSE ON komutuna kadar mouse dallanmalarını durdurur.
Mouse dallanmaları, ON MOUSE..... GOSUB yönergesi kullanılarak yapılabilmektedir.
NAME KOMUTU: Kullanım Şekli:
NAME "eski dosya ismi" AS "yeni dosya ismi"
Disketteki, harddiskteki ya da RAM'daki bir dosyanın ismini değiştirmek için kullanılır.
Her iki dosya ismi de, yazısal bir dizidir. Verilen eski dosya ismi, diskette (ya da belirtilen diğer bir yerde) mevcut olmalı, ancak yeni dosya ismi mevcut olmamalıdır. Yeni dosya isminde sürücü ya da directory ismi kullanılmaz. Aksi takdirde "Rename access disks" hata mesajı ortaya çıkar.
Amiga Basic'in şu anki versiyonu info dosyasının ismini de otomatik olarak değiştirir.
NAME "Adres.dat" AS "Adresler"
komutu, o anki directory'de bulunan Adres.dat adlı dosyayı Adresler yapar.
NEW KOMUTU: Kullanım Şekli:
NEW
NEW komutu, o an bellekte bulunan programı siler. Bunu yapmadan önce tüm açık dosyaları kapatır; değişkenleri ve liste penceresini temizler.
NEW, doğrudan komut modunda verilebileceği gibi Project menüden de seçilebilir. Bu genellikle yeni bir program yazımına başlamadan önce yapılır. Komut verildiğinde bellekte bir program varsa ve yüklendikten sonra değişiklik yapılıp yeni haliyle kaydedilmemişse, programı kaydetmenizi sağlayan bir diyalog penceresi görüntülenir.
Bir program içinde çalıştırıldığında NEW, Amiga Basic'in editleme moduna dönmesine sebep olur.
Trace modu ON durumunda ise, yani açıksa; NEW komutu, bu modu kapatır. Pencere genişliği ve yerleşimleri değiştirilmişse, NEW komutundan sonra aynı kalır.
NEXT KOMUTU: Kullanım Şekli:
NEXT [sayaç değişkeni,sayaç değişkeni...]
NEXT komutunu, FOR...NEXT döngüsü içinde görmüştük hatırlarsanız. NEXT, FOR ile başlayan döngünün sonudur ve verilen sayaç değişkeni tamamlanana kadar döngü tekrarlanır.
OBJECT.AX, OBJECT.AY KOMUTLARI: Kullanım Şekilleri:
OBJECT.AX obje-no,hız OBJECT.AY obje-no,hız
Bu komutlar, bir objenin X ve Y yönünde hızlandırılmasını sağlarlar. Obje, obje-no ile belirtilir.
OBJECT.AX komutu, objenin yataydaki hızını; OBJECT.AY ise dikey hızını tespit eder. Hız değeri, komutta hız parametresi ile belirtilir.
OBJECT.AX ile verilen pozitif sayı, objeyi soldan sağa; negatif sayılar ise sağdan sola hareket ettirir.
OBJECT.AY komutunda ise verilen pozitif hız değeri objeyi yukarıdan aşağıya; negatif değer ise aşağıdan yukarıya hareket ettirir.
hız, saniyede alınacak piksel olarak tanımlanır. Obje hareketi, OBJECT.START komutu verilene kadar gerçekleşmez.
OBJECT.CLIP KOMUTU: Kullanım Şekli:
OBJECT.CLIP (x1,y1)-(x2,y2)
Amiga Basic'in objeleri sadece bu alana çizmesini sağlamak amacıyla bir dörtgen tanımlanır. Obje hareketleri de sadece bu alan içerisinde yapılır. Diğer bir deyişle; objeler sadece koordinatları bu tanımlanan alan kesimi içerisinde olduğunda görüntülenir.
(x1,y1) parametresi, tanımlanan alanın sol üst köşesinin, (x2,y2) ise sağ alt köşesinin koordinatını belirler.
OBJECT.CLIP'in değeri, çıktı penceresidir. Pencere boyutları genişletme kutucuğu kullanılarak değiştirilmişse, OBJECT.CLIP otomatik olarak değişmez, son tanımlı değerinde kalır.
OBJECT.CLOSE KOMUTU: Kullanım Şekli:
OBJECT.CLOSE [obje-no][,obje-no...]
Obje-no ile belirtilen objeleri bellekten siler. Bir obje, bellekte kendi büyüklüğü ile paralel bir alan kaplar. Eğer bir objenin çok uzun süre açık kalmasına gerek yoksa, kullanıldıktan sonra kapatılarak, bellekte tuttuğu yeri boşaltmasını sağlayabiliriz.
Komutta obje-no belirtilmemişse, o anki çıktı penceresinde bulunan tüm objeler silinecek ve bellekte objelere ayrılan alan serbest kalacaktır.
Gelecek ay, OBJECT komutlarını tamamlayarak hepsini içeren bir örnek vereceğiz. Hoşça kalın ...