AMIGA BASIC
Retro bilgisayarMerhaba... Bu ay Basic yazı dizimiz teorik olarak bitiyor. Bundan böyle değişik Basic örnekleri ve özel kullanım şekilleri ile birlikte olacağız. İşte, bu ay inceleyeceğimiz son birkaç komut: WHİLE.... WEND KOMUTU Kullanım şekli: ifade Amiga Basic' in bir diğer döngü komutu olan WHİLE .... WEND, yönergeler kısmında verilen komut dizinini, ifade kısmında koyulan şart doğru olduğu sürece çalıştırır. yönergeler, bir ya da daha fazla sayıda Amiga Basic komut satırından meydana gelir ve WHİLE ile WEND arasına yerleştirilir. Program, ifade kısmında verilen koşul olumsuz olana kadar bu bölümdeki işlemleri yapar. Koşul yanlış olduğunda, program WEND yönergesinden sonraki satırdan itibaren çalışmasına devam eder. WHİLE ve WEND programın aynı satırında olabileceği gibi, iki ayrı satırında da olabilir. En tipik örneği klavyeden bir tuşa basılmasını bekleyen döngülerdir: ınkey$ — "" : WEND WHILE..WEND döngüleri de diğer döngüler gibi içiçe girebilecekleri gibi diğer döngülerle karışık bir yapı oluşturabilir. Azx65 'A'nın Ascii değeri kayıt-1 'adres defterinin ilk kaydı. alfabetik: WHİLE A<-90 *2'nin Ascii değeri WHİLE kayıt<sayfa 'genişlik IF LEFT$(defter$ (kayıt,1),1)— CHR$ (A) THEN FOR J- To kayıt PRINT# 1, defter$ NEXT J : PRİNT # 1,"
END İF
* kayıt işaretçisi;
WEND
kayıt-1 artır
WEND
AMIGA BASIC
Bu örnekte gördüğünüz gibi üç ayrı döngü iç içe girebilir. WIDTH KOMUTU Kullanım şekli: WIDTH (uzunluk|, tab genişliği) WIDTH LPRINT| genişliği| WIDTH genişliği| WIDTH Cihaz adı|,uzunluk||,tab genişliği) Dört farklı geçerli kullanım şeklini verdiğimiz WIDTH komutu yazım satırının uzunluğunu ve tab genişliğini tespit etmek için kullanılır. Çıkış, herhangi bir çıkış cihazının standart karakter genişliği ile belirlenir. Çıkış cihazı "SCRN:", "COM1:" ya da "LPT1:" olarak verilebilir. Herhangi bir cihaz belirtilmezse çıkış cihazı SCRN: yani ekran kabul edilir. LPT1:, satır yazıcıyı belirtir. WIDTH LPRINT formatı, printer genişliğini tespit etmenin alternatif bir yoludur. uzunluk, çıkış cihazının bir satırına sığabilecek standart karakter sayısıdır. Ancak yazı kursoru veya printer kafasının pozisyonu POS ya da LPOS yönergesi ile değiştirilmişse, 255'ten kalan kısım uzunluk için esas alınır. Amiga'nın ekran tanımlı satır uzunluğu 255'tir. Örneğin bir satırda 60 karakter istenirse, WIDTH 60 kullanılır. Komutta kullanılan tab genişliği ise
taramak için kullanılır. Çıkış satırlar arası ve başlangıç pozisyonları için ayarlamalar tab genişliği ile belirlenebilir. Komutun birinci ve ikinci kullanım şekilleri arasındaki tek fark, ikincinin printer için kullanılmasıdır. Komutun dosya no bulunan kullanım şekli, dosyaya yeni bir uzunluk ataması için kullanılır ve dosyanın yazı uzunluğunu tespit eder. Burada uzunluk, dosyada o anda kullanılan fontun standart karakter genişliği ile belirlenir. Tab genişliği ise kayıttaki dataları ayıran virgülün pozisyonunu belirleyecektir. WIDTH 255: PRINT STRING$(800, "!") WINDOW KOMUTU Kullanım şekli: WINDOW (x2, y2)) WINDOW(x) WINDOW CLOSE pencere-no WINDOW OUTPUT pencere-no Bu komutlardan yeni bir pencere yaratmak ve onu kullanmak için yararlanılabilir. Her pencere, ona kolayca erişilebilmesini sağlayan bir pencere numarasına sahiptir. BASIC penceresi de bir numaraya sahiptir ve bu numara 1'dir. Bu nedenle kullanıcı tarafından yaratılacak yeni pencerelerin numaraları 2 ve daha büyük sayı olmalıdır. Komutun ilk kullanım şekli, yeni bir çıktı penceresi yaratır ve onu ekrandaki tüm pencerelerden öne yerleştirir.
pencere no, yeni yaratılan pencereye verilen numara; başlık, varsa pencerenin başlık çubuğunda görüntülenecek isimdir, (x1, y1) parametreleri pencerenin sol üst ve sağ alt köşelerini belirleyerek pencere genişliğini tespit eder. Bu parametreler AMIGA BASIC, pencere için tüm ekranı kullanır. tip argümanı, pencereye birtakım özellikler ekleyen sayı olarak girilir. Bu sayılar şunlardır: 1 Pencerenin sağ alt köşesine genişletme kutucuğu koyar. Bu kutucuk aracılığıyla, mouse yardımıyla pencereyi büyütüp küçültmek mümkün olur. 2 Pencere mouse ile başlık çubuğundan tutularak hareket ettirilebilir. 4 Pencereye, arkaya alma kutucuğunu ekler. Bu kutu kliklenerek pencere ekranındaki diğer pencerelerin arkasına atılabilir. 8 Pencerenin sol üst köşesine kapatma kutucuğu yerleştirir. Bu kutucuk mouse ile kliklenerek pencere kapatılabilir. 16 Pencerenin ekrandaki yeri değiştirildiğinde, içinde bulunanlar tekrar yerleştirilir. Bu opsiyona, özellikle pencerede PAINT komutu kullanmak istenirse ihtiyaç duyulur. tip argümanı olarak bu değerlerin iki ya da daha fazlası birlikte kullanılabilir. Örneğin 3 verilirse, bu 1 ve 2. özelliklerin toplamı olarak kabul edilir; oluşturulan pencere başlık çubuğundan tutulup hareket ettirilebilir ve genişletme kutusuyla boyutları değiştirilebilir. Tip için atanacak değer 0 ile 31 arasında olabilir. Verilecek özelliklerin sayısal değerleri toplanarak tip argümanı olarak komuta ilave edildiğinde, AMIGA BASIC pencerede verilen özellik kombinasyonunu kullanacaktır. Bu özelliklerin hiçbirini kullanmayacaksanız; WINDOW pencere-no komutu ile pencereyi ön plana yerleştirip çıktı penceresi olarak kullanabilirsiniz. Komutun ikinci kullanım şekli, WINDOW'un fonksiyon versiyonudur. Bu fonksiyonu kullanarak o anki çıktı penceresi hakkında bilgiler alabilirsiniz. x, 0 ile 8 arasında bir sayı olabilir. WINDOW(0), seçili çıktı penceresinin pencere-no'sunu verir. o anda aktif çıktı penceresi yoksa, işlem mouse ile son kliklenen pencere için yapılır. WINDOW(1), o anki çıktı penceresininki bu AMIGA BASIC'in tüm ekran çıkışlarını gönderdiği penceredir- pencere-no'sunu verir. WINDOW(2), o anki çıktı penceresinin pixel olarak genişliğini verir. WINDOW(3), o anki çıktı penceresinin pixel olarak yüksekliğini verir. WINDOW(4), o anki çıktı penceresindeki son yerleşimin pixel olarak x- koordinatını verir. Bu nokta, çıktı kursorunun
o anki pozisyonudur ve bir sonraki karakter burada görüntülenecektir. WINDOW(5) ise, çıktı penceresindeki kursorun pozisyonunun y- koordinatını verir. WINDOW(6), aktif çıktı penceresinde kullanılabilecek maksimum renk sayısını verir. WINDOW(7), aktif çıkış penceresine karşılık gelen "Intuition" penceresinin kayıt işaretidir. Bu işletim sistemi tarafından muhafaza edilen pencere yapısıdır. WINDOW(8), RASTPORT yapısının Intuition data alanının adresini verir. Bu değeri, ancak Amiga işletim sistemi yapısını biliyorsanız kullanabilirsiniz. Ekranda açık bir pencereyi silmeden ekrandan kaldırmak için kullanacağınız komut, WINDOW CLOSE pencere-no komutudur. Pencere görünmez olsa bile yine çıkış gönderebilirsiniz. Pencere-no ile belirtilen pencereyi aktif çıkış penceresi yaparak ön plana almak için WINDOW OUTPUT formatı kullanılır. SCREEN 1, 320, 200, 5,1 WINDOW 1, "Çıkış Penceresi",, 31,1 PRINT "Biz buradayız/" WHILE MOUSE(0)=0 AND INKEY$= "" LINE (319*RND,199*RND)-(319*RND, 199*RND), 31*RND, bf WEND WINDOW CLOSE 1 : SCREEN CLOSE 1 : END Açılabilecek pencere büyüklüğü boyutu ile de ilişkilidir. Ekran çözünürlüğü ve (x2,y2) argümanı olarak verilebilecek maksimum sayılar şunlardır:
EkranModu MaksimumPencereGenişliği 320x300 311x185 320x400 311x385 640x200 617x185 640x400 617x385 WRITE KOMUTU: Kullanım şekli:
WRITE (değişken ya da değer), (değişken ya da değer)... PRINT komutuna benzer. Dataları ekrana, o anki yazım pozisyonundan itibaren yazar. Ayırıcı olarak sadece virgül ve noktalı virgül kullanılır. İki komut arasındaki fark, WRITE komutunun datalar arasına virgülleri ve data kalemlerinin tırnak işaretlerini yerleştirmesidir. Bu özellik WRITE komutunu özellikle değerleri dosyalara gönderirken çok faydalı yapar. Değişken ya da değer kısmına ekrana yazdırılmak istenen data kalemleri girilir. WRITE "Merhaba"; "Nasılsınız?" WRITE# KOMUTU: Kullanım şekli: WRITE#dosya-no, (Değişken ya da değer), (Değişken ya da değer) WRITE# komutu, verilen data listesindeki değerleri ekran yerine dosya-no ile verilen dosyaya yazar. Özellikle sırasal dosyalara karakter dizisi yazmak için çok faydalı bir komuttur, çünkü datalar tırnak işaretleri arasında dosyaya gönderilecek ekran dataları değişkenleri ayırır. Dataları okuduğunuzda tüm ayırıcıları ile birlikte almış olmalısınız. Aşağıdaki örnek WRITE# ve PRINT# komutlarının kullanımını ve farklarını görebileceğiniz güzel bir çalışma olacak: OPEN "RAM:TEST" FOR OUTPUT AS 1
A$-"Herkese"
B$-"Merhaba"
WRITE#
WRITE# 1, A$, B$
WRITE# 1, A, B, A$, B$
PRINT#1,A,B
PRINT# 1, A:B
PRINT# 1, A$, B$
PRINT# 1, A$; B$
PRINT# 1, A; B; A$, B$
CLOSE |
Bu program ile oluşan dosyaya baktığı-
mızda, sonucun şöyle olduğunu görecek-
siniz;
12345, 67890 "Herkese", " Merhaba" 12345, 67890,"Herkese", "Merhaba" 12345 67890 12345 67890 Herkese Merhaba HerkeseMerhaba 12345 67890 HerkeseMerhaba Evet... Amiga Basic komutlarını tamamladık. Herhalde artık ihtiyacımız olan Basic komutlarını rahatlıkla kullanabiliyor; en azından istediğimiz işlemi yapabileceğiniz bir komut olup olmadığını biliyorsunuz. Şimdi AmigaBasic programlarınızda karşılaştığınız hata mesajlarına bakalım. Hepimiz sık sık bir beep sesi ile ekranın üst tarafında açılan bir hata kodu ve hata mesajı uyarısı ile karşılaşıyoruz değil mi? İşte hata kodları, hata mesajları ve açıklamaları: Bu aylık bu kadar. Gelecek ay hata mesajlarını incelemeye devam edeceğiz. Hoşçakalın...
en karşılığı FOR komutu bulunamaması uyumsuzluğu vardır.
Hata Kodu — Mesaj 1 NEXT WITHOUT FOR-FOR'SUZ NEXT NEXT yönergesinde verilen deği: mıştır. Yani FOR....NEXT dön; 2 SYNTAX ERROR - YAZIM HATASI
Program satırının yazımında hata vardır. Uyumsuz parantezler, tanımsız komut ya da yönerge, yanlış noktalama gibi. 3 RETURN WITHOUT GOSUB- GOSUB'SIZ RETURN Bir GOSUB ile dallanma yapılmadığı halde program çalışması sırasında RETURN komutu ile karşılaşılmıştır. 4 OUT OF DATA - EKSİK DATA Bir READ komutu çalıştığında okunmamış DATA yönergeleri yoksa, bu hata mesajı alınır.
5 ILLEGAL FUNCTION CALL - GEÇERSİZ FONKSİYON ÇAĞRISI Bir BASIC komutuna geçersiz değerler geçirildiğinde ortaya çıkar. Dizi elemanlarında negatif değerler ya da bunları GET ve PUT komutlarında kullandığınızda bu hatayı alırsınız. Bu mesaj BASIC komutlarından parametrelere çok büyük, çok küçük ya da yanlış tipte değerler geçirildiğinde de ortaya çıkar. 6 OVERFLOW - TAŞMA
Amiga Basic'in sayısal formatından çok büyük bir hesaplama sonucu alındığında ortaya çıkar. Taşma olduğunda sonuç sıfır kabul edilir ve çalışma hatasız sürecektir.
7 OUT OF MEMORY - BELLEK YETERSİZ Program çok uzun ve çok fazla sayıda değişken, çok komplike işlemler, FOR döngüsü ya da GOSUB olduğunda bu hata mesajı alınır. 8 UNDEFINED LABEL - TANIMLANMAMIŞ ETİKET GOTO, GOSUB ve DELETE gibi program satırlarında verilen etiket, program içinde bulunamamıştır. Etiket ismi yanlış yazılmış, etiketten sonra iki nokta üst üste konmamış, alt programla rutine aynı isim verilmiş olabilir. 9 SUBSCRIPT OUT OF RANGE - BOYUTLARDA TAŞMA Bu hata otomatik boyutlandırılmış bir dizinin elemanları dışında bir dizi elemanına erişilmek istendiğinde ortaya çıkar. Aynı şey DIM yönergesinde verilen boyuttan daha büyük bir dizi eleman değeri girildiğinde de olur. Dizi adının yanlış yazılması, dizi olmayan bir değişkene subscript verilmesi de hatayı oluşturan nedenlerden bazılarıdır. 10 DUPLICATE - TEKRAR TANIMLAMA Boyutlandırılmış bir dizinin tekrar boyutlandırılmaya çalışılması bu hataya neden olur. Halihazırda boyutlandırılmış bir diziyi tekrar boyutlandıramazsınız; çünkü yeni DIM yönergesinden önce, daha önce aynı isimle açılmış bu dizi kullanılmış olabilir. Ancak diziyi ERASE komutu ile silip UBOUND ve LBOUND ile alt ve üst limitlerini yeniden tanımlamak mümkündür. Birinci DIM yönergesinden sonra OPTION BASE komutunu kullanmak da, bu hata mesajına neden olur.