PROGRAM DÖKÜMLERİ
Retro bilgisayarGeçen sayıyı okuyanlar hatırlayacaklardır. BASIC'e ait temel emirlerin neler yapabileceğine değinmiş ve küçük örnekler vermiştik. Konumuz CIRCLE emri idi ve bu emirle sadece sıkıcı daireler değil noktalar ve çizgiler de çizebileceğimizi görmüştük. Yazının sonunda ise sizlere bu bilgilerle yapabileceğiniz iki basit program fikri vermiştim, işte bu programlardan biri analog saat:
REM BİR SAAT YAPALIM
pi = 3.1415
start:
CLS
x = WINDOW (2):xx=x2
y = WINDOW (3):yy=y2
I = y*1.5
FOR f = 0 TO 360 STEP 6
a = f*pi/180
IF (f MOD 5) = 0 THEN CIRCLE (xx,yy),l+25,1 ,-a,a,y/x
CIRCLE (xx,yy),l+10,1,-a,a,y/x
NEXT!
CIRCLE (xx,yy),l,2„,y/x
PAINT (xx,yy),2
ilk:
GOSUB kac
GOSUB akrep
GOSUB yel
devam:
edak = dak
WHILE edak = dak
GOSUB kac
WEND
IF WINDOW(2) <> x OR WINDOW (3) o y THEN GOTO start
GOSUB akrep
GOSUB yel
GOTO devam
akrep:
CIRCLE (xx,yy),l2,2,-es,es,y/x
a = saat MOD 12
IF a <= 3 THEN a s a+12
a = (15-a)*pi/6
CIRCLE (xx,yy),l2,3,-a,a,y/x
es = a
RETURN
yel:
CIRCLE (xx,yy),(l4)*3,2,-ed,ed,y/x
a s dak
IFa<=15THENa = a+60
a = (75-a) * pi / 30
CIRCLE (xx,yy),(l4)*3,3,-a,a,y/x
adsa
RETURN
kac:
a$ = TIME$
saat = VAL (LEFT$(a$,2))
dak = VAL (MID$(a$,4,2))
RETURN
Görüldüğü üzere ne fazla uzun ne de çok karışık. Gelelim program üzerine söyleyeceklerimize. Bir kere çok hızlı bir program değil. Bu yüzden sadece dakikaları okuyabiliyor. Ola ki bir Basic Compiler kullanıyorsunuzdur, hemencecik saniye kısmı eklenebilir. Programda ilk işimiz ekranı temizlemek ve penceremizin boyutlarını öğrenmek oluyor. Bu boyutları kullanarak saatimizi pencereyi iyice dolduracak şekilde çiziyoruz. İlk döngü dakika çizgileri için. Circle emri istediğimiz açıda çizgi çekmek için kullanılıyor. Daha sonra gövde çiziliyor. Circle ile çizgi veya nokta çizmenin kötü yanı yavaş olması. Ancak programdaki gibi bir arka plan oluşturmak için yararlı.





Üç adet alt programımız var. Bunlardan kaç, saati okuyor; akrep, akrebi silip yeni yerine yazıyor; yel, ise aynı işlemi yelkovanla yapıyor. Alt programlar kullanmanın yararı burada açık. Ben akrep ve yelkovanı düz çizgi olarak çektim. Ancak program zaten dakikada bir çalışıyor. Dolayısı ile çok detaylı birer ibre çizmek mümkün. Yeni bir ibre kullanmak için yapmanız gereken sadece bu kısmı değiştirmek olacak.
Alt programlarda açıyı hesaplarken kullandığım a değerinin hesabı biraz karmaşık gelebilir. Bunun sebebi açıların saat 3'te 0 olup saat yönünün tersine artması. Biraz matematik ve biraz deneme yanılma sorunlarımızı hallediyor. Belki sonuç karmaşık gözükebilir ancak, çok basit adımlarla ulaşılabiliyor.
WINDOW komutu ile pencerenin genişliğini okuma ve tüm hesapları bu değerlere göre yapma insanı oldukça rahatlatıyor. Alt programları yazmadan doğrudan programın arasına bölümleri eklemek programı yazarken daha kolay. Ancak değişiklikleri zorlaştırıyor. İnsanın bazen kendini kontrol edip ilerde rahatlamak için önceden biraz sıkıntı çekmesini öğrenmesi gerekiyor. Her neyse umarım hoşumuza gider. Şimdi değinmek istediğim konu, dergiye gelen mektuplarda sıkça sorulan bir konu: Amiga Basic ile dosya açmak. Hemen program dökümleri vermek yerine biraz konu üzerinde konuşalım. Dosya açmak nerede işinize yarar? İlk olarak hafızadaki bir bilgiyi (Örneğin kendi yazdığınız yazı programı ile hazırlanmış olan bir yazıyı) diskete aktarıp saklamak veya diskette bulunan bir dosyayı (Örneğin Deluxe Paint ile çizilmiş bir resmi) hafızaya almak ve kullanmak için dosya işlemleri gerekir. Bu tür işlemler için kullanılan dosyalara İngilizcede SEQUENTIAL (sıralı) denir. Sıralı denmesinin sebebi buradaki bilgiyi yazdığınız sıra ile geri alabilmeniz. Bunun yanısıra özellikle adres defterleri, telefon defterleri gibi benzer formatta birçok bilgiyi (100 adet telefon numarası gibi) saklayabilmek için RANDOM ACCESS (Rasgele erişim) adı verilen bir dosyalama çeşidi mevcut. Bu dosyalama çeşidi sözü edilen uygulamalarda çok gereklidir ve sıkça kullanılır. İlk olarak her bir bilginin nelerden oluşacağı belirlenir (FIELD). Örnek olarak bir telefon defteri 10 karakter isimden, 20 karakter soy isminden ve 11 karakter numaradan oluşsun. Bilgisayar böylece bu düzende bilgileri diskete yazıp okuyabilecek hale gelir. Buraya kadar çok özel bir şey yok. İşte şimdi bu dosyalama türünün güzelliği ortaya çıkıyor. Bilgisayar her kaydettiğiniz bilgi paketini bir numara ile tanıyor (Kayıt numarası). Bilgiyi bu numara ile kaydedebiliyor ve okuyabiliyorsunuz. Kısaca 100 telefon numarası olan bir dosyadan numarasını bildiğiniz takdirde istediğinizi hemen bulabiliyorsunuz. Yani tüm 100 numarayı okumadan hemen TAK diye istediğiniz numaraya erişebiliyorsunuz. İşin teorisi bu.
Gelelim pratiğe, ilk olarak dosya açma işlemi var. Burada ilk olarak bir dosya numarası kavramı ortaya çıkıyor. Aynı anda birçok dosyayı okuma ve yazma şansınız var. Dolayısı ile açık olan dosyaları birbirinden ayırt edebilmek için birer numara veriyorsunuz. Dahası açacağınız dosya ismi giriliyor ve en kötüsü ise dosya türü belirleniyor. Sıralı (Sequential) dosyalar açmak en zoru burada bir de yazmak için mi (OUTPUT), okumak için mi (INPUT) yoksa eklemek için mi (APPEND) dosya açtığınızı belirtiyorsunuz. Bir diğer önemli olay açılan bir dosyayı MUTLAKA K A P A T I N ! ! yoksa yaptığınız değişiklikler kaydolmaz.
Artık konuyu biliyorsunuz, şu emirleri el kitabınızdan veya dergi açıklamalarından yararlanarak incelemeniz tavsiye edilir: OPEN, CLOSE, FIELD, INPUT#, LINE INPUT#, GET, PUT, PRINT#, WRITE#. Artık daha çok şey biliyorsunuz, şimdi bazı sorunlarla tanışmanın tam sırası. Sequential dosyalar hiç sorun yaratmaz.
REM RAM:Deneme isimli dosyayı yarat, dosya numarası 1
Pi= 3.1415
OPEN "RAM:Deneme" FOR OUTPUT AS 1
FOR F= 0 TO 90 step .2
A = SIN((F*pi)/180)
d$= STR$ (A)
PRINT #1,"SINUS ",F, " = ",d$
NEXTF
CLOSE 1
Program size hemencecik RAM: a deneme isimli bir dosya açarak 0'dan 90'a kadar olan açıların sinüsünü yazacak. Size kalan (Varsa) bu dosyayı bir Printer'a aktarmak. (Printer'a bastırmak için bu yolu kullanmak zorunda değiliz.) Her ne ise. Açıkça görülüyor ki bu dosyalar fazla sorunlu değil. Gelelim birçoklarının takıldığı telefon defterlerine. Etrafta birçok örnek telefon defteri programı görmek mümkün. Ne var ki bu defterinizin basit bir telefon defterinden kullanışlı olmasını istiyorsanız bazı sorunlarla karşılaşacaksınız. İlk sorun disket okuma hızından kaynaklanıyor. Amiga dosyayı disketten okuyana dek çok kıymetli zaman kayboluyor. Bunu engellemenin en basit yolu gereken dosyaları RAM:'da tutmak. Hafıza sorunları ile karşılaşmıyorsak sorunlarımızı bir süre için dindirecek bir çözüm. Tabii ki çakılmalara ve resetlere karşı korumak için RAD: tavsiye edebilirim. (Özellikle VI.3 kullananlar). Ancak yapılan değişikliklerin eninde sonunda diskete aktarılması gerekecektir.
Tüm bunlar tamam kendinize bir defter hazırladınız ve defterde tam 500 adet isim var. Siz de tuttunuz F. Kağan Gürkaynak beyefendinin telefon numarası ne imiş diye merak ettiniz. İşte en büyük sorun burada başlıyor. RANDOM ACCESS adı verilen rasgele erişimli dosyalar eğer kayıt numarası biliniyorsa o kaydı doğrudan okumanızı sağlayacaktır. Yani benim kayıt numaramı bilmiyorsanız tüm kayıtları teker teker okuyarak girilen isimle aranan ismi karşılaştırmak ve doğru ismi aramak zorundasınız. Sizi temin ederim ki hiç verimli bir yöntem değil. Eğer dosyalarınız alfabe sırasına göre dizilmiş olsa aramanız belki biraz daha kolay olurdu. Bu düşüncenin ne kadar iyi bir çözüm olduğunu düşünmeden önce 500 adet ismi dizmenin ne kadar külfetli bir iş olduğunu düşünün. Kısaca eğer kayıt numarasını herhangi bir şekilde bilemiyorsak Rasgele erişimli dosyalar çok yararlı olmuyorlar. (Sakın aklınıza her kayıt yaptığınız adamın ismini ve kayıt numarasını bir deftere yazma fikri gelmesin.)
Gelecek yazımızda nispeten kullanışlı bir telefon defteri tasarlayacak ve yazacağız. Umarım anlattıklarımın yararını görüyorsunuzdur. (İletişim 0'da) Gelecek sayıda görüşmek üzere.




