Amiga Dünyası sayı 13, sayfa 27

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 27

FOR i=l TO 10 IFdeg=l THEN NEXT i ... (programın devamı)

Burada FOR ... NEXT döngüsü sadece 'deg' değişkeninin değeri 1 olduğunda devam eder. Aynı rutinin daha düzenlisi aşağıdaki şekilde olabilir:

FORi=l TO 10 IF deg<>l THEN con NEXT i con:

... (programın devamı)

Burada koşulun tersi alınarak komutların dizilişinin de değiştirildiği gözünüze çarpmıştır. Ama iki programın da işlevi aynıdır.

Fakat daha düzgün şekilde çalışmayı sevenler için Hi-Soft'un yeni komutları arasında REPEAT ... END REPEAT, DO ... UNTIL ve WHILE ... WEND döngü komutları vardır. Bunlarla iki örneğe bakacak olursak:

WHILE sart=l

WEND Veya Do ……… UNTIL sart<>l

AmigaBASIC'te FOR ... NEXT döngüsünde, döngü değişkeninin NEXT'ten sonra tekrar verilmesi gerekmez. Hi-Soft da aynı toleransı göstermekte; fakat iç içe döngüler kurduğunuzda, karşınıza bazen hatalar çıkabilir. Bu yüzden, NEXT'ten sonra döngü değişkenini her zaman vermenizde fayda var. Hem böylece programınızın okunabilirliğini artırırsınız.

Aynı şekilde CALL ... SUB prosedür komutlarında CALL komutu girilmeden de prosedür çağrılabilir, fakat compiler'da bu bazen hata çıkarabilir. Ayrıca prosedür çağrılırken bunu ayrı bir satırda yaparsanız bazı sinir bozucu ufak hatalardan da kurtulabilirsiniz.

Bu compiler'ın kötü yanlarından bir diğeri, değişken ve alt-rutin isimlerinin aynı tabloda toplanmasıdır. Bu, değişken isimlerini alt-rutin ismi olarak kullanamayacağımızı şart koşan bir eksiklik. Buna bulduğum en uygun çözüm; değişken isimlerinin başına VAR, alt-rutin isimlerinin başına da JMP harflerini eklemek oldu. Bu sayede değişkenlerle alt-rutin isimleri gayet güzel ayrılmış oluyor.

Bildiğiniz gibi AmigaBASIC'te komutların yanı sıra bazı özel kelimeler değişken ya da alt-rutin ismi olarak kullanılamaz. Aynı kural HiSoft için de geçerli. HiSoft'ta normal BASIC komutlarına ek olarak kullanılabilecek komutlar da aynı şekilde değişken/alt-rutin ismi olarak kullanılamaz. Ayrıca bir library açtığınızda buna ait tüm alt-rutinlerin isimleri de programınızda değişken/alt-rutin ismi olarak kullanılamaz. Tüm library'lerde kullanılan alt-rutin isimlerini ROM Kernel Manual: Libs & Devices'ta bulabilirsiniz.

Alt-rutinlerle ilgili bir kural daha: Uzun bir program hazırlamaya başladığınızı farz edin. Böyle bir programda genelde bir menü ve bunun aracılığıyla erişilebilen alt-menüler bulunur. Normalde ana menü ekranını hazırladıktan sonra bunun alt-rutinlerini yavaş yavaş ekleyebilirsiniz. Programı AmigaBASIC'te çalıştırdığınızda menü çıkacaktır; fakat daha alt-rutini hazırlanmamış bir fonksiyon seçtiğinizde, program gayet haklı olarak hata mesajı vererek çıkacaktır. Fakat HiSoft'ta böyle bir şey mümkün değil. Ana menüyü hazırladıktan sonra tüm alt-rutinleri yaratmanız gerekmekte. Derleyicimiz compile işlemi sırasında tüm alt-rutinlerin hafızadaki yerlerini hazırlayacağından eksik bir alt-rutin ya da fazla bir alt-rutin ismi hata mesajı ile karşılaşmanıza yol açacaktır. Bunun için en basit çözüm tüm alt-rutinleri hazırlayarak bunları boş bırakmak. Daha sonra zaman buldukça bu alt-rutinleri teker teker yazmaya başlayabilirsiniz. Fakat dikkat edin; eğer alt-rutine GOSUB ile gidiyorsanız alt-rutinin sonuna (bu durumda başına) RETURN eklemeyi unutmayın. Alt-rutini yazacağınız zaman, alt-rutin ismiyle RETURN komutu arasına boş satır açar ve buraya programınızı yazabilirsiniz.

AmigaBASIC'te CLEAR komutu yardımıyla fazladan hafıza kullanabilirken (biliyorsunuz, AmigaBASIC açılışta sadece 25000 byte'lık text saklama bölgesi açmakta), HiSoft'ta bu komut pek işe yaramamakta. Nedeni de basit; çalışma alanının boyutunu menüden preferences yardımıyla ayarlayabilirsiniz. Fakat yine de programınızın kendi hafızasını ayarlamasını istiyorsanız ilk satıra şu komutu girin:

REM SOPTION k80

Bu size 80 KByte'lık bir çalışma alanı açacaktır. k80 yerine istediğiniz KByte değerinin başına <k> harfi koyarak kullanabilirsiniz.

Çalışma alanı hakkında bir diğer dikkat edilecek husus da çalışma alanının büyüklüğünün, programın disketteki uzunluğunun en az 4 katı olması gerektiğidir. Bunun nedeni, compile edilen programın her zaman ilk halinden daha uzun olmasıdır.

Biz biraz cömert davranarak 4 katı kullandık; bu sayede derleyicimiz çok daha rahat çalışabilir.

Bu arada yine çalışma alanıyla ilgili olan ve benim karşıma çıkan bazı ufak sorunları kısaca tanımlamak istiyorum. Bu sorunlardan ilki, bilgisayarın hafızası 1 MByte'da iken ve program uzunluğu 100 KByte'dan uzun olduğunda bazen ortaya çıkıyor. Hafızadaki program gayet iyi bir şekilde hatasız olarak compile ediliyor; fakat çalıştırıldığında, karşıma bir 'INTERNAL ERROR' mesajı çıkıyordu. Bunun sebebi, compiler'ın değişkenler için ayırdığı hafızanın yetmemesinden kaynaklanıyor olması. Ayrıca program uzun olunca, dallanmalarda da belki sorun yaratıyor olabilir. Bunun için bulduğum gayet basit bir yöntem var: programın içindeki tüm gereksiz REM satırları, boşlukları ve satır aralıklarını silmeniz gerekli. Ayrıca mümkünse bilgisayarınızın hafızasını artırın.

Uzun programlarda çıkan başka bir hata, compile işlemi sırasında HiSoft BASIC'in programınıza zaman zaman istenmeyen bir karakter eklemesi. Bu, benim başıma sık geldi ve kısa sürede buna da bir çözüm buldum: saçma karakter eklenen satırı bir aşağı itin ve aradaki boş satırın başına REM yazarak ekran sonuna kadar boşluk verin. Artık yine saçma bir karakter çıktığında bu, REM satırına denk geleceğinden hiçbir sorun yaratmaz. 100-150 KByte arası programlarda bu hata değişik yerlerde bir hayli çıkabiliyor. Bütün hata yerleşen yerlere bir REM satırı probleminizi çözecektir.

Çok ender olarak karşılaştığım diğer bir hata, LOCATE komutunun çalışmamasıydı. Buna da çözüm gayet basit. Aşağıdaki satırları programınıza eklemeniz yeterli:

REM Bu iki satır programın başına ge- lecek: LIBRARY "graphics.library" rastport&=WINDOW(8)

REM Bu satırlar ise en sona eklenmeli: SUB XPRINT(x,y,t$)

CALL Move&(rastport&,x,y) CALL Text&(rastport&,SADD(t$),LEN(t$)) END SUB

Bu satırları programınıza ekledikten sonra aşağıdaki satırda olduğu gibi bu prosedürü çağırırsanız; hem yazılar ekrana normal PRINT komutunda olduğundan daha hızlı gelir, hem de yazıyı grafiksel olarak istediğiniz x, y koordinatlarında basabilirsiniz.

CALLXPRINT 100,50,"Selam!**

Son bir hatadan daha bahsetmek istiyorum. Grafik için kullanılan GET ve PUT komutlarının kullanımına dikkat edin. Ekran dışından bir bölgeyi GET ile alıp, bunu PUT ile tekrar basmaya kalkıştığınızda, bilgisayarınızın ruhu bir an Hindistan'a gidip gelebilir (=Guru Meditation). Bu şekilde bilgisayarı kilitlemek gayet basit; bu sebeple programlarınızı yazarken, mümkün olan tüm hata kontrollerini kullanmanızda fayda var.

Klavyeyle gezinmek için ← ve → tuşları.