AMIGA BASIC

Merhaba... Geçen ay OBJECT komutlarını tamamlamış ve örnekler vermiştik. Bu ay kaldığımız yerden devam edeceğiz.

OCT KOMUTU: Kullanım Şekli: Dizi=OCT$(X)

Bu fonksiyon, bir ondalık sayının sekiz tabanındaki karşılığını verir. Çevirme işleminden önce, ondalık sayı tamsayı yapılır.

X, sekizlik tabana çevrilecek ondalık sayıdır.

INPUT "SAYIYI GİRİN ";A 
PRINT       "SEKİZLİK       KARŞILIĞI 
";OCT$(A)

şeklinde verilen bir örnek programda girilen ondalık sayı A değişkeni içerisine yerleştirilecek ve sekiz tabanına göre çevrim işlemi yapılacaktır. A, 16 olarak girilirse sonuç 20, 60037 olarak girilirse &0165205 olur.

ON BREAK KOMUTU: Kullanım Şekli: ON BREAK GOSUB etiket ON BREAK GOSUB 0

AmigaBasic'e CTRL-C tuşları ile ya da Run menüden Stop seçilerek program durdurulduğunda, hangi rutine dallanacağı belirtilir, etiket, program içindeki alfanümerik bir etiket ya da satır numarası olabilir, etiket yerine 0 verilirse, yani ikinci format kullanılırsa, program durdurma işlevi kapanır ve yeni bir ON BREAK GOSUB komutu ile aktif hale getirilene kadar kullanılmaz. Önemli nokta, bu event trapping'in (kesintilerin) BREAK ON komutu çalıştırılmadan aktif hale gelmeyeceğidir.

Bu komutla programın atlayacağı altrutin, kullanıcıya programın kırılamayacağını ve programı nasıl durdurabileceğini belirtmelidir. "Gerçekten çıkmak istiyor musunuz?" diye soran ve EVET/HAYIR kutucuklarını içeren bir pencere hoş olmaz mı?

Altrutin, RETURN komutu ile bitmelidir.

ON COLLISION KOMUTU: Kullanım Şekli: ON COLLISION GOSUB etiket ON COLLISION GOSUB 0

Birden fazla obje olduğunda ve objelerin birbiriyle veya ekran çerçeveleri ile çarpıştığında programın hangi etikete dallanacağı tanımlanır. Bu işlem için COLLISION ON komutu ile collision trapping'in açık olması gerekir, etiket, alfanümerik bir satır etiketi ya da satır numarası olabilir, etiket, 0 verilirse collision trapping çalışmaz. Yeni bir ON COLLISION GOSUB komutu ile bir hedef belirtilinceye kadar bu durumda kalır.

ON ERROR GOTO KOMUTU: Kullanım Şekli: ON ERROR GOTO satır

Bir hata oluştuğunda program kontrolünü bir hata yakalama rutinine gönderir. Komutun çalışabilmesi için ERROR ON komutunun çalışmış olması gerekir, satır alfanümerik bir satır etiketi olabileceği gibi, satır numarası da olabilir; 0 verildiğinde, error handling işlemini kapatır.

10 ON ERROR GOSUB 150 
150 IF (ERR=230) AND (ERL=90) 
THEN PRINT "Yeniden Dene":RESUME 
80

Örnekteki RESUME yönergesi hata mesajı verildikten sonra 80. satırdan devam etmesini sağlar.

ON.......GOSUB ON.......GOTO KOMUTLARI: Kullanım Şekli: ON x GOSUB etiket [,etiket][,etiket] ON x GOTO etiket [,etiket][,etiket] x değerine bağlı olarak etiket listesinde belirtilen satır numarası ya da alfanümerik satır etiketlerine dallanma komutlarıdır. x, bir ifadenin sonucu olabilir. Eğer x, bir satır numarasına ya da satır etiketine karşılık geliyorsa, program o satıra dallanır. Sonuç 0 veya etiket listesindeki değerlerin sayısından büyük olursa, program çalışmasına bir sonraki satırdan devam eder. Değer 1 ise ilk etikete, 2 ise ikinciye dallanır, x, virgüllü bir rakamsa değer yuvarlanır. x, negatif bir sayı olarak verilirse,

AMIGA BASIC

"ILLEGAL FUNCTION CALL" hata mesajı verilir. Program GOSUB ile dallandığı program bölümünden RETURN ile komutun bir alt satırına geri döner.

Komutun her iki formatı da aynı amaçla kullanılır. GOTO kullanılan formatta, dallanılan yerde RETURN bulunmaz ve çalışma oradan devam eder.

BASLA: 
INPUT "Seçiminiz (1-4)? ",X% 
IF X%<1 OR X%>3 THEN GOTO 
BASLA:
ON 
X% 
GOSUB 
ALT1 ,ALT2,ALT3,ALT4
END 
ALTİ:
PRINT "1. rutin" 
RETURN 
ALT2: 
PRINT "2. rutin" 
RETURN 
ALT3: 
PRINT "3. rutin" 
RETURN 
ALT4: 
PRINT "4. rutin" 
RETURN

ON MENU KOMUTU: Kullanım Şekli: ON MENU GOSUB etiket ON MENU GOSUB 0

Bu komut, AmigaBasic'e kullanıcı pulldown menüden bir seçim yaptığında nereye dallanacağını belirtir. Bu dallanmanın yapılabilmesi için, bu event trapping'in MENU ON yönergesiyle aktif hale getirilmiş olması gerekir, etiket, bir etiket ya da satır numarası olabilir. 0 verilirse, pulldown menüler kapanacaktır. Menüleri tekrar açmak için, MENU ON komutunu kullanmanız gerekir. Program, ON MENU komutuyla dallandığı altrutinden RETURN ile geri dönmelidir.

ON MOUSE KOMUTU: Kullanım Şekli: ON MOUSE GOSUB etiket ON MOUSE GOSUB 0

Sol mouse düğmesine basıldığında, programın dallanacağı rutini bildirir. İşlevin yapılabilmesi için ilgili event trapping'in açık olması gerekir, etiket, yine alfanümerik bir satır etiketi ya da satır numarası olarak verilir. 0, mouse dallanmalarını MOUSE ON yönergesi yeniden çalıştırılana kadar kapatır. Komutla dallanılan altrutin RETURN ile sonlanmalıdır.

ON TIMER KOMUTU: Kullanım Şekli: ON TIMER (x) GOSUB etiket ON TIMER GOSUB 0

DERLEYİCİLER

İlgili event trapping ON olduğunda ve dahili saatte verilen x saniye dolduğunda, belirtilen etikete dallanır. Bu yönerge, her x saniyede bir dallanmaya sebep olur. Etiket, bir etiket ya da satır numarası olabilir. n, 0'a eşit ve 86400'den (24 saat) büyük olamaz. GOSUB 0, TIMER event'ını keser.

OPEN KOMUTU: Kullanım Şekli: 1. Kullanım - OPEN mod,[#]dosya-no,dosya-adı[,uzunluk]

2. Kullanım - OPEN dosya-adı [FOR mod] AS [#]dosya-no [LEN=],uzunluk

OPEN komutu, bir dosya ya da bir cihaz açar. Her iki yazım şekli de aynı amaçla kullanılır.

Bir dosya, dosyaya veri girişi ya da veri okuma için açılır, mod kısmında, hangi amaçla açıldığı belirtilir.

dosya-no, tamsayı bir değerdir ve 1 ile 255 arasında bir sayı ile belirtilir. Dosya açıldığında bu numara dosya ile birleştirilir ve bu dosya ile yapılacak tüm işlemlerde kullanılır.

dosya-adı, dosyanın adını belirten bir karakter dizisidir; başında sürücü ya da disket adı verilebilir.

uzunluk, bir dosya kaydının kaplayacağı yer olarak düşünülmeli ve 32767 byte'ı aşmamalıdır. Bu parametre kullanılmazsa, sequential (sırasal) ya da random (rasgele) erişimli dosyaların her birinde tanımlı kayıt uzunluğu 128 byte olur. Random dosyalar için kayıt uzunluğu, bir kayıt içindeki karakter sayısı olarak hesaplanmalıdır. Sequential dosyalarda uzunluk parametresinin tek bir kaydın uzunluğunu göstermesine gerek yoktur; zira bu tür dosyalar, farklı uzunluklarda kayıtlar içerebilirler. Bu tür dosya kullanıldığında, uzunluk, diskete yazılmadan ya da disketten okunmadan önce buffer'a yüklenecek karakter sayısını belirtir.

1. Kullanım şeklinde, mod aşağıdakilerden biri olabilir:

0 Sequential çıkış modu 1 Sequential giriş modu R Random giriş/çıkış modu A Sequential ekleme modu 2. Kullanım şeklinde, mod aşağıdaki kelimelerle belirtilir: OUTPUT Sequential çıkış modu INPUT Sequential giriş modu APPEND Sequential çıkış modunu belirtir ve dosya işaretçisini dosya sonuna pozisyonlar. Bir PRINT# ya da WRITE# yönergesi ile eklenen yeni kayıt dosyanın sonuna eklenir.

Bu kullanımda mod yazılmazsa, random erişim modu olduğu kabul edilir.

Şu ana kadar Sequential ve Random diye bahsettiğimiz dosya türlerini bildiğinizi varsaydık. İsterseniz örneklerle komutumuzu tamamlamadan önce, bilmeyenler için bu dosyaları kısaca tanıtalım:

Sequential dosyalar, bilgileri sırayla arka arkaya saklayıp yine aynı sırayla okuyan dosyalardır. Yani her kayıt bir öncekinin arkasına eklenir. Bu tür dosyalar birçok programlama işlevini yerine getirebilir; ancak geniş uygulamalar için yeterli değildir. Düşünün, yüzlerce kayıt olan bir dosya oluşturdunuz. Yazarken pek bir sorun yok; ama bir kaydı ararken ilk kayıttan başlayarak tüm kayıtlar tek tek okunacaktır. Bu da oldukça sıkıcı ve zaman alıcı bir işlem.

Random dosyalar işte burada imdadınıza yetişiyor. Dosya kayıtlarına rasgele erişim sağladığı için, erişim hem çok kolay hem de süresi çok kısa. Bu dosyalar, her kayda bir numara verirler. Bu numara ile siz de okuma ya da yazma yapacağınız zaman kayıt numarasını kullanarak çabuk ve kolayca erişebilirsiniz. Kaydın nereye yerleştiği ve dosya uzunluğunun bu işlemde hiçbir önemi yoktur.

Şimdi önce bir sequential, sonra da random dosya örneği ile bu ayki tanıtımlarımızı tamamlayalım:

SEQUENTIAL DOSYAYA YAZMA OPEN "Adresler" FOR OUTPUT AS 1

Entry: 
PRINT 
INPUT "isim";Ad$ 
INPUT "adres";Adres$ 
INPUT "sehir";Sehir$ 
INPUT "telefon";Tel$ 
PRINT#l,Ad$ 
PRINT#l,Adres$ 
PRINT#l,Sehir$ 
PRINT#l,Tel$ 
x=x+l 
PRINT "KAYIT'x" ("Ad$") YAPILDI." 
PRINT  "YENİ   KAYIT YAPILACAK 
MI?" 
INPUT "Y/N:";Ans$ 
IF UCASE$(Ans$)="Y" THEN Entry
CLOSE 
PRINT  "DOSYA  KAPANDI.   PROG- 
RAM SONU."

SEQUENTIAL DOSYADAN OKUMA

OPEN "Adresler" FOR INPUT AS 1
ReadData: 
INPUT#l,Ad$ 
INPUT#I,Adres$ 
INPUT#l,Sehir$ 
INPUT#l,Tel$ 
PRINT 
PRINT "isim: ";Ad$ 
PRINT "Adres: ";Adres$ 
PRINT "Sehir: ";Sehir$ 
PRINT "Telefon: ";Tel$
IF EOF( 1 )=0 THEN ReadData 
CLOSE 1
RANDOM DOSYAYA YAZMA 
OPEN "r",#l ,"AdresIer.rel",92 
FIELD #1,30 AS Ad$,30 AS Adres$,20 
ASSehir$,12ASTel$
Entry: 
PRINT 
INPUT "isim";AdEntry$ 
INPUT "Adres";AdresEntry$ 
INPUT "Sehir";SehirEntry$ 
INPUT "Tel ";Tel Entry $ 
LSET Ad$=AdEntry$ 
LSET Adres$=AdresEntry$ 
LSET Sehir$=SehirEntry$ 
LSETTel$=TelEntry$ 
x=x+l 
PUT#l,x 
PRINT "KAYIT "x" ("Ad$") YAPIL- 
DI."
PRINT "YENİ KAYIT YAPILACAK 
MI?"
INPUT "Y/N:";Ans$ 
IF UCASE$(Ans$)="Y" THEN Entry
CLOSE 1 
PRINT "DOSYA KAPANDI. PROG- 
RAM SONU."
RANDOM DOSYADAN OKUMA 
OPEN V,#l,"Adresler.rer,92 
FIELD #1,30 AS Ad$,30 AS Adres$,20 
ASSehir$, 12ASTeI$
INPUT "ADRES NUMARASI";Nmbr 
GET#l,Nmbr 
IF EOF(l) THEN PRINT "KAYIDA 
ULAŞILAMIYOR." :GOTO ReadData
PRINT Ad$ 
PRINT Adres$ 
PRINT Sehir$ 
PRINT Tel$ 
INPUT "BAŞKA BIR KAYIDA BAK- 
MAK (Y/N)";ans$
IF UCASE$(ans$)o"N" THEN Read- 
Data
CLOSE 1 
PRINT "DOSYA KAPANDI. PROG- 
RAM SONU."

Bu ayki Basic tanıtımını OBJECT komutlarına verdiğimiz örneklerle tamamladık. Gelecek ay bu köşede buluşmak dileğiyle, hoşçakalın...