Bu sayfadaki yazılar
Sayfanın metni
Sayfa 41
Ekran Hareketliliği
Ekranda iki tür hareketlilikten bahsediyoruz. Biri ekranın bir bölümünün başka bir yere taşınması, diğeri de belirlenen bölümün kendi içinde hareket etmesi. MOVE satır1,kolon1,x,y,satır2,kolon2 ile, ilk belirlenen dikdörtgen alan, sol üst köşesi satır2,kolon2 olacak şekilde kopyalanır. Gene her iki bölümün de ekrana sığması gerektiği malum... Diğer türdeki hareketliliği sağlayan komutlar birbirine çok benziyor. Bu nedenle birini açıklayıp, diğerlerini ona göre anlatacağız.
DOWNW satır,kolon,x,y ile belirlenen alan içinde kalan ekran kısmı, bir satır aşağı kaydırılır. Ancak dikdörtgenin veri değişmez ve dikdörtgenin son satırında bulunan yazı en üst de örnek programımızı inceleyin. INKEY değişkeni, devamlı olarak klavyeyi okur ve o anda basılı olan fonksiyon tuşunun numarasını taşır. Bu 1-16 arası bir sayıdır. Eğer o anda bir fonksiyon tuşu basılı değilse, içeriği sıfır olur.
Bir başka komut, DATA'ların okunması ile ilgili. RESTORE komutu, DATA'ları baştan okumaya yarar. Ancak aradaki satırlardan birinde başlayan bir DATA'yı tekrar okumak çok zordur. Fakat şimdi, RESET satır no ile istediğiniz satırdan DATA'ları okumaya başlayabiliriz. Bir ufak komut da, programın belli bir süre beklemesiyle ilgili. PAUSE 10 dediğinizde bilgisayar 10 saniye bekleyecektir. Eğer PAUSE “merhaba!!”,3 derseniz de, ekrana merhaba satırında ortaya çıkar. Yani bu komutu bir FOR..NEXT döngüsü içinde kullanırsanız, belirlenen dikdörtgende yukarıdan aşağı doğru bir rotasyon elde edersiniz. DOWNW yerine DOWNB kullandığınızda, aşağıdan kaybolan satır yukarıdan ortaya çıkmayacak, üst satır boşalacak ve böylece bu komut tekrarlandığında o bölge bir süre sonra boş kalacaktır. Yukarıdaki işlem sağa, sola ve yukarı doğru da yapılabilir. Bunun için UPB veya UPW (yukarı), LEFTB veya LEFTW (sola), RIGHTB veya
RIGHTW (sağa) kullanılır.
Karakter Dizileri
Gelelim yabancıların string dedikleri karakter dizilerine. Eskiden beri eksikliğini çektiğiniz emirlerin bir kısmını SIMONS' BASIC'de bulabileceksiniz. Örneğin DUP(string,tekrar) ile, önceden belirlenmiş string'i “tekrar” kadar kendine eklemiş olursunuz. Örneğin A$=DUP(“A”,5) ile A$=“AAAAA” olur. Yalnız dikkat edin, tekrar*LEN(string) yani sonucun uzunluğu en fazla 255 olmalı. A$=INSERT(string1,string2,pozisyon) ile, string2'nin içine string1'i verilen yerden itibaren ekler. Örneğin A$=INSERT(“XXXX”,“RIZA”,3) ile A$=“RIZXXXXA” elde edilir. Pozisyon'un değeri LEN(string2)'den küçük olmalıdır. Sıfır olabilir. Bu durumda string1, string2'nin başına eklenir. A$=INST(string1,string2,pozisyon) da deminki işi yapar, ancak bu arada string2'nin string1 tarafından kaplanan kısmı ortadan kalkar. Örneğin A$=INST(“XX”,“RIZA”,1) ile A$=“RXXA” ortaya çıkar. Pozisyon için 0-LEN(string2) arası değerler geçerlidir. Son durumda string1, string2'nin sonuna eklenir.
Ekran Komutları
Ekran komutları başlığı altında, ekrandaki renkleri ve karakterleri etkileyen değişik komutları inceleyeceğiz. Örneğin COLOUR renk1,renk2 ile ekran ve çerçeve rengi belirlenebilmekte. “renk1” ile çerçeve rengi, “renk2” ile de ekran rengi verilmekte. Her biri 0-15 arasında olmalı. Daha önceden bu işlem POKE 53280,renk1: POKE 53281,renk2 ile yapılıyordu. Ekran çerçevesinin iki renk arasında belli bir hızla gidip gelmesini ve bu işin programdan bağımsız olarak yürümesini BFLASH hız,renk1,renk2 sağlıyor. İşlem BFLASH 0 ile durdurulmakta. Karakterlerin yanıp sönmesini de FLASH renk,hız sağlar. Ekrandaki belirtilen renge sahip tüm karakterler verilen hıza göre yanıp sönmeye başlar. Bu işlemi de OFF komutu sona erdirir. Son iki komuttaki hız parametresi 1-255 arasında olmalıdır ve 1 en hızlı yanıp sönmeyi sağlar. Bir de ekranda dikdörtgen biçimindeki alanları etkileyen komutlar var. Örneğin INV satır,kolon,x,y komutu ile, sol üst köşesi verilen satır ve kolonda olan, “x” kadar genişliğe ve “y” kadar da yüksekliğe sahip dikdörtgen alan negatif hale gelir. FCHR satır,kolon,x,y,kod dediğinizde, belirlediğiniz dikdörtgenin içi “kod” ile ekran kodunu (0-255) verdiğiniz karakterle doldurulur. FCOL satır,kolon,x,y,renk ise verdiğiniz dikdörtgen alanı belirlediğiniz renk (0-15) ile kaplar. FILL satır,kolon,x,y,kod,renk ise yukarıdaki iki komutu birleştirir. Verilen alanı hem renk, hem de karakter ile kaplar. Yukarıdaki komutların hepsinde belirlenen dikdörtgenin tamamen ekrana sığması gerektiği söylemeye gerek yok sanırız. Bir diğer komut, her karakterin farklı zemin rengine sahip olabilmesini sağlar. BCKGNDS renk1,renk2, renk3,renk4 ile bu işlem yapılır. Ancak artık karakter setinin sadece ilk 64 karakterini kullanabilirsiniz. “renk”
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 40
Tuna ERTEMALP
İşte dört aylık mutlu beraberliğimizin sonuna geldik. Artık SIMONS' BASIC'in son sırlarını da öğreneceksiniz. Önce programlara veri getirilen yeniliklere bir bakacağız. Derken sıra ekranı şenlendirmeye, hatta hareket ettirmeye gelecek. Yazı dizilerini değiştiren bazı yeni komutlar olduğunu göreceğiz. Karşımıza ikide birde çıkan ERROR mesajlarına nasıl dur diyeceğimizi öğreneceğiz. Ve son olarak da COMMODORE 64 ile çevre birimleri arasındaki bilgi alışverişinin SIMONS' BASIC'de nasıl olduğunu inceleyeceğiz.
Veri Giriş Çıkışı
Çözünüz bugüne kadar, ekranda istenilen bir noktaya yazı yazmak için bir emir olmadığından yakınmışsınızdır. Artık var. PRINT AT(kolon,satır)... ile istediğiniz satır ve kolona yazınızı getirebilirsiniz. Hatta şöyle bile yapabilirsiniz:
10 A$- AT(3,6) 4 “COMMODORE” 20 PRİNT A$
Ancak bu son numarayı sadece program içinde çekebilirsiniz. Peki, bir yazıyı o anda ekranda yazılı olan satırın, örneğin üç satır altına yazdırmak isterseniz ne olacak? Bunun için de LIN değişkeni var. Bu değişken daima o anda cursor'un bulunduğu satırın numarasını taşır. Böylece deminki problemi, PRINT AT (kolon, LIN+3) ile halledebiliriz. Bir diğer komut da, yazımızı ekran satırında tam ortaya yazabilmemizi sağlar. CENTRE olan bu komut, tıpkı PRINT gibi kullanılır. Ancak arkasından gelenleri, yazının yazılacağı satır içinde ortalar. Bir ufak kusuru var. Yazma işlemi bittikten sonra alt satıra geçmiyor, sanki sonunda noktalı virgül olan PRINT gibi davranıyor. Bu nedenle eğer alt satıra geçmek isteniyorsa, bir CENTRE komutunun bitiminde, bir de PRINT yapmak gerekir.
Gelelim sayıların yazımına. Duymuşsunuzdur, bazı bilgisayarlarda PRINT USING gibi komutlar vardır ve basılacak sayıların görünüşlerini etkilerler. SIMONS' BASIC de bu işe
USE komutu ile bir çözüm getirmiş. USE görünüş, sayı ile işimizi hallediyoruz. Ancak “sayı” parametresinin yerinde STR$(sayı) olmalı. Özelliklerine gelince. Bu da bir karakter dizisi. # işareti bir sayıyı simgeliyor. “.” işareti ile ondalık noktayı belirtiyoruz. Bunun dışında yeralan her karakter aynen basılıyor. Örneğin USE “### TL”,STR$(100.567) sonucunda “100.57 TL” elde edilir. Gördüğünüz gibi, sayının kesilen kısmı bir önceki haneye yuvarlanarak geçiriliyor. USE da tıpkı CENTRE gibi bir alt satıra inmez, olduğu yerde kalır.
Verileri bastırırken nasıl kontrol edebiliyorsak, okurken de edebilmeliyiz. FETCH işte bu işi yapıyor. FETCH “kontrol dizisi”, uzunluk, değişken ile sadece istediğimiz karakterlere sahip ve en fazla belirlenen uzunlukta okuma yapabilir, böylece kullanıcının programımıza yanlış veri vermesini önlemiş oluruz. Ekrandan karakterler okunur. Bunlardan üçü özel karakterlerdir. Eğer HOME tuşuna basmışsanız, bu sadece harfler geçerlidir anlamına gelir. CRSR-aşağı tuşu ile, tüm sayılar ve harfler dışında kalan karakterler kullanılabilir hale gelir. CRSR-sağa tuşu ile de, sadece harfler ve SHIFT+harfler geçerli olur. Örneğin sadece harflerin ve 1 rakamının kullanılmasını istiyorsak, “kontrol dizisi” içinde HOME tuşu ve 1 rakamı bulunmalıdır. FETCH de bir öncekiler gibi alt satıra inmez. Ayrıca veri beklenirken soru işareti çıkmaz ve cursor yanıp sönmez. Yazdığınızı silmek için sadece DEL tuşunu kullanabilirsiniz, CRSR tuşları işe yaramaz. Belirtilen uzunluğun son karakterini de verdikten sonra, DEL tuşu da işe yaramaz; size sadece RETURN'e basmak düşer. Siz en iyisi bir PAUSE yazıp, ondan sonra 3 saniye beklemeye geçecektir. Yalnız dikkat edin, PAUSE ile mesaj arasında bir boşluk olmalı.